[ros-diffs] [winesync] 26520: Autosyncing with Wine HEAD

winesync at svn.reactos.org winesync at svn.reactos.org
Thu Apr 26 15:38:14 CEST 2007


Author: winesync
Date: Thu Apr 26 17:38:13 2007
New Revision: 26520

URL: http://svn.reactos.org/svn/reactos?rev=26520&view=rev
Log:
Autosyncing with Wine HEAD

Added:
    trunk/reactos/dll/win32/wintrust/crypt.c   (with props)
Modified:
    trunk/reactos/dll/win32/wintrust/register.c
    trunk/reactos/dll/win32/wintrust/wintrust.rbuild
    trunk/reactos/dll/win32/wintrust/wintrust.spec
    trunk/reactos/dll/win32/wintrust/wintrust_main.c
    trunk/reactos/dll/win32/wintrust/wintrust_ros.diff

Added: trunk/reactos/dll/win32/wintrust/crypt.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/wintrust/crypt.c?rev=26520&view=auto
==============================================================================
--- trunk/reactos/dll/win32/wintrust/crypt.c (added)
+++ trunk/reactos/dll/win32/wintrust/crypt.c Thu Apr 26 17:38:13 2007
@@ -1,0 +1,207 @@
+/*
+ * WinTrust Cryptography functions
+ *
+ * Copyright 2006 James Hawkins
+ *
+ * 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 <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "wintrust.h"
+#include "mscat.h"
+#include "mssip.h"
+
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(wintrust);
+
+/***********************************************************************
+ *      CryptCATAdminAcquireContext (WINTRUST.@)
+ *
+ * Get a catalog administrator context handle.
+ *
+ * PARAMS
+ *   catAdmin  [O] Pointer to the context handle.
+ *   sysSystem [I] Pointer to a GUID for the needed subsystem.
+ *   dwFlags   [I] Reserved.
+ *
+ * RETURNS
+ *   Success: TRUE. catAdmin contains the context handle.
+ *   Failure: FALSE.
+ *
+ */
+BOOL WINAPI CryptCATAdminAcquireContext(HCATADMIN* catAdmin,
+                    const GUID *sysSystem, DWORD dwFlags )
+{
+    FIXME("%p %s %x\n", catAdmin, debugstr_guid(sysSystem), dwFlags);
+
+    if (catAdmin) *catAdmin = (HCATADMIN)0xdeadbeef;
+    return TRUE;
+}
+
+/***********************************************************************
+ *             CryptCATAdminCalcHashFromFileHandle (WINTRUST.@)
+ */
+BOOL WINAPI CryptCATAdminCalcHashFromFileHandle(HANDLE hFile, DWORD* pcbHash,
+                                                BYTE* pbHash, DWORD dwFlags )
+{
+    FIXME("%p %p %p %x\n", hFile, pcbHash, pbHash, dwFlags);
+
+    if (pbHash && pcbHash) memset(pbHash, 0, *pcbHash);
+    return TRUE;
+}
+
+/***********************************************************************
+ *             CryptCATAdminEnumCatalogFromHash (WINTRUST.@)
+ */
+HCATINFO WINAPI CryptCATAdminEnumCatalogFromHash(HCATADMIN hCatAdmin,
+                                                 BYTE* pbHash,
+                                                 DWORD cbHash,
+                                                 DWORD dwFlags,
+                                                 HCATINFO* phPrevCatInfo )
+{
+    FIXME("%p %p %d %d %p\n", hCatAdmin, pbHash, cbHash, dwFlags, phPrevCatInfo);
+    return NULL;
+}
+
+/***********************************************************************
+ *      CryptCATAdminReleaseContext (WINTRUST.@)
+ *
+ * Release a catalog administrator context handle.
+ *
+ * PARAMS
+ *   catAdmin  [I] Context handle.
+ *   dwFlags   [I] Reserved.
+ *
+ * RETURNS
+ *   Success: TRUE.
+ *   Failure: FAIL.
+ *
+ */
+BOOL WINAPI CryptCATAdminReleaseContext(HCATADMIN hCatAdmin, DWORD dwFlags )
+{
+    FIXME("%p %x\n", hCatAdmin, dwFlags);
+    return TRUE;
+}
+
+/***********************************************************************
+ *      CryptCATAdminRemoveCatalog (WINTRUST.@)
+ *
+ * Remove a catalog file.
+ *
+ * PARAMS
+ *   catAdmin         [I] Context handle.
+ *   pwszCatalogFile  [I] Catalog file.
+ *   dwFlags          [I] Reserved.
+ *
+ * RETURNS
+ *   Success: TRUE.
+ *   Failure: FALSE.
+ *
+ */
+BOOL WINAPI CryptCATAdminRemoveCatalog(HCATADMIN hCatAdmin, LPCWSTR pwszCatalogFile, DWORD dwFlags)
+{
+    FIXME("%p %s %x\n", hCatAdmin, debugstr_w(pwszCatalogFile), dwFlags);
+    return DeleteFileW(pwszCatalogFile);
+}
+
+/***********************************************************************
+ *      CryptCATClose  (WINTRUST.@)
+ */
+BOOL WINAPI CryptCATClose(HANDLE hCatalog)
+{
+    FIXME("(%p) stub\n", hCatalog);
+    return TRUE;
+}
+
+/***********************************************************************
+ *      CryptCATEnumerateMember  (WINTRUST.@)
+ */
+CRYPTCATMEMBER *WINAPI CryptCATEnumerateMember(HANDLE hCatalog, CRYPTCATMEMBER* pPrevMember)
+{
+    FIXME("(%p, %p) stub\n", hCatalog, pPrevMember);
+    return NULL;
+}
+
+/***********************************************************************
+ *      CryptCATOpen  (WINTRUST.@)
+ */
+HANDLE WINAPI CryptCATOpen(LPWSTR pwszFileName, DWORD fdwOpenFlags, HCRYPTPROV hProv,
+                           DWORD dwPublicVersion, DWORD dwEncodingType)
+{
+    FIXME("(%s, %d, %ld, %d, %d) stub\n", debugstr_w(pwszFileName), fdwOpenFlags,
+          hProv, dwPublicVersion, dwEncodingType);
+    return 0;
+}
+
+/***********************************************************************
+ *      CryptSIPCreateIndirectData  (WINTRUST.@)
+ */
+BOOL WINAPI CryptSIPCreateIndirectData(SIP_SUBJECTINFO* pSubjectInfo, DWORD* pcbIndirectData,
+                                       SIP_INDIRECT_DATA* pIndirectData)
+{
+    FIXME("(%p %p %p) stub\n", pSubjectInfo, pcbIndirectData, pIndirectData);
+ 
+    return FALSE;
+}
+
+/***********************************************************************
+ *      CryptSIPGetSignedDataMsg  (WINTRUST.@)
+ */
+BOOL WINAPI CryptSIPGetSignedDataMsg(SIP_SUBJECTINFO* pSubjectInfo, DWORD* pdwEncodingType,
+                                       DWORD dwIndex, DWORD* pcbSignedDataMsg, BYTE* pbSignedDataMsg)
+{
+    FIXME("(%p %p %d %p %p) stub\n", pSubjectInfo, pdwEncodingType, dwIndex,
+          pcbSignedDataMsg, pbSignedDataMsg);
+ 
+    return FALSE;
+}
+
+/***********************************************************************
+ *      CryptSIPPutSignedDataMsg  (WINTRUST.@)
+ */
+BOOL WINAPI CryptSIPPutSignedDataMsg(SIP_SUBJECTINFO* pSubjectInfo, DWORD pdwEncodingType,
+                                       DWORD* pdwIndex, DWORD cbSignedDataMsg, BYTE* pbSignedDataMsg)
+{
+    FIXME("(%p %d %p %d %p) stub\n", pSubjectInfo, pdwEncodingType, pdwIndex,
+          cbSignedDataMsg, pbSignedDataMsg);
+ 
+    return FALSE;
+}
+
+/***********************************************************************
+ *      CryptSIPRemoveSignedDataMsg  (WINTRUST.@)
+ */
+BOOL WINAPI CryptSIPRemoveSignedDataMsg(SIP_SUBJECTINFO* pSubjectInfo,
+                                       DWORD dwIndex)
+{
+    FIXME("(%p %d) stub\n", pSubjectInfo, dwIndex);
+ 
+    return FALSE;
+}
+
+/***********************************************************************
+ *      CryptSIPVerifyIndirectData  (WINTRUST.@)
+ */
+BOOL WINAPI CryptSIPVerifyIndirectData(SIP_SUBJECTINFO* pSubjectInfo,
+                                       SIP_INDIRECT_DATA* pIndirectData)
+{
+    FIXME("(%p %p) stub\n", pSubjectInfo, pIndirectData);
+ 
+    return FALSE;
+}

Propchange: trunk/reactos/dll/win32/wintrust/crypt.c
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: trunk/reactos/dll/win32/wintrust/register.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/wintrust/register.c?rev=26520&r1=26519&r2=26520&view=diff
==============================================================================
--- trunk/reactos/dll/win32/wintrust/register.c (original)
+++ trunk/reactos/dll/win32/wintrust/register.c Thu Apr 26 17:38:13 2007
@@ -23,104 +23,1063 @@
 #include "windef.h"
 #include "winbase.h"
 #include "winerror.h"
+#include "winuser.h"
+#include "winreg.h"
+#include "winnls.h"
 
 #include "guiddef.h"
 #include "wintrust.h"
 #include "softpub.h"
+#include "mssip.h"
 
 #include "wine/debug.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(wintrust);
 
+static CRYPT_TRUST_REG_ENTRY SoftpubInitialization;
+static CRYPT_TRUST_REG_ENTRY SoftpubMessage;
+static CRYPT_TRUST_REG_ENTRY SoftpubSignature;
+static CRYPT_TRUST_REG_ENTRY SoftpubCertficate;
+static CRYPT_TRUST_REG_ENTRY SoftpubCertCheck;
+static CRYPT_TRUST_REG_ENTRY SoftpubFinalPolicy;
+static CRYPT_TRUST_REG_ENTRY SoftpubCleanup;
+
+static CRYPT_TRUST_REG_ENTRY SoftpubDefCertInit;
+
+static CRYPT_TRUST_REG_ENTRY SoftpubDumpStructure;
+
+static CRYPT_TRUST_REG_ENTRY HTTPSCertificateTrust;
+static CRYPT_TRUST_REG_ENTRY HTTPSFinalProv;
+
+static CRYPT_TRUST_REG_ENTRY OfficeInitializePolicy;
+static CRYPT_TRUST_REG_ENTRY OfficeCleanupPolicy;
+
+static CRYPT_TRUST_REG_ENTRY DriverInitializePolicy;
+static CRYPT_TRUST_REG_ENTRY DriverFinalPolicy;
+static CRYPT_TRUST_REG_ENTRY DriverCleanupPolicy;
+
+static CRYPT_TRUST_REG_ENTRY GenericChainCertificateTrust;
+static CRYPT_TRUST_REG_ENTRY GenericChainFinalProv;
+
+static const WCHAR Trust[]            = {'S','o','f','t','w','a','r','e','\\',
+                                         'M','i','c','r','o','s','o','f','t','\\',
+                                         'C','r','y','p','t','o','g','r','a','p','h','y','\\',
+                                         'P','r','o','v','i','d','e','r','s','\\',
+                                         'T','r','u','s','t','\\', 0 };
+
+static const WCHAR Initialization[]   = {'I','n','i','t','i','a','l','i','z','a','t','i','o','n','\\', 0};
+static const WCHAR Message[]          = {'M','e','s','s','a','g','e','\\', 0};
+static const WCHAR Signature[]        = {'S','i','g','n','a','t','u','r','e','\\', 0};
+static const WCHAR Certificate[]      = {'C','e','r','t','i','f','i','c','a','t','e','\\', 0};
+static const WCHAR CertCheck[]        = {'C','e','r','t','C','h','e','c','k','\\', 0};
+static const WCHAR FinalPolicy[]      = {'F','i','n','a','l','P','o','l','i','c','y','\\', 0};
+static const WCHAR DiagnosticPolicy[] = {'D','i','a','g','n','o','s','t','i','c','P','o','l','i','c','y','\\', 0};
+static const WCHAR Cleanup[]          = {'C','l','e','a','n','u','p','\\', 0};
+
+static const WCHAR DefaultId[]        = {'D','e','f','a','u','l','t','I','d', 0};
+static const WCHAR Dll[]              = {'$','D','L','L', 0};
+
+/***********************************************************************
+ *              WINTRUST_InitRegStructs
+ *
+ * Helper function to allocate and initialize the members of the
+ * CRYPT_TRUST_REG_ENTRY structs.
+ */
+static void WINTRUST_InitRegStructs(void)
+{
+#define WINTRUST_INITREGENTRY( action, dllname, functionname ) \
+    action.cbStruct = sizeof(CRYPT_TRUST_REG_ENTRY); \
+    action.pwszDLLName = HeapAlloc(GetProcessHeap(), 0, sizeof(dllname)); \
+    lstrcpyW(action.pwszDLLName, dllname); \
+    action.pwszFunctionName = HeapAlloc(GetProcessHeap(), 0, sizeof(functionname)); \
+    lstrcpyW(action.pwszFunctionName, functionname);
+
+    WINTRUST_INITREGENTRY(SoftpubInitialization, SP_POLICY_PROVIDER_DLL_NAME, SP_INIT_FUNCTION)
+    WINTRUST_INITREGENTRY(SoftpubMessage, SP_POLICY_PROVIDER_DLL_NAME, SP_OBJTRUST_FUNCTION)
+    WINTRUST_INITREGENTRY(SoftpubSignature, SP_POLICY_PROVIDER_DLL_NAME, SP_SIGTRUST_FUNCTION)
+    WINTRUST_INITREGENTRY(SoftpubCertficate, SP_POLICY_PROVIDER_DLL_NAME, WT_PROVIDER_CERTTRUST_FUNCTION)
+    WINTRUST_INITREGENTRY(SoftpubCertCheck, SP_POLICY_PROVIDER_DLL_NAME, SP_CHKCERT_FUNCTION)
+    WINTRUST_INITREGENTRY(SoftpubFinalPolicy, SP_POLICY_PROVIDER_DLL_NAME, SP_FINALPOLICY_FUNCTION)
+    WINTRUST_INITREGENTRY(SoftpubCleanup, SP_POLICY_PROVIDER_DLL_NAME, SP_CLEANUPPOLICY_FUNCTION)
+    WINTRUST_INITREGENTRY(SoftpubDefCertInit, SP_POLICY_PROVIDER_DLL_NAME, SP_GENERIC_CERT_INIT_FUNCTION)
+    WINTRUST_INITREGENTRY(SoftpubDumpStructure, SP_POLICY_PROVIDER_DLL_NAME, SP_TESTDUMPPOLICY_FUNCTION_TEST)
+    WINTRUST_INITREGENTRY(HTTPSCertificateTrust, SP_POLICY_PROVIDER_DLL_NAME, HTTPS_CERTTRUST_FUNCTION)
+    WINTRUST_INITREGENTRY(HTTPSFinalProv, SP_POLICY_PROVIDER_DLL_NAME, HTTPS_FINALPOLICY_FUNCTION)
+    WINTRUST_INITREGENTRY(OfficeInitializePolicy, OFFICE_POLICY_PROVIDER_DLL_NAME, OFFICE_INITPROV_FUNCTION)
+    WINTRUST_INITREGENTRY(OfficeCleanupPolicy, OFFICE_POLICY_PROVIDER_DLL_NAME, OFFICE_CLEANUPPOLICY_FUNCTION)
+    WINTRUST_INITREGENTRY(DriverInitializePolicy, SP_POLICY_PROVIDER_DLL_NAME, DRIVER_INITPROV_FUNCTION)
+    WINTRUST_INITREGENTRY(DriverFinalPolicy, SP_POLICY_PROVIDER_DLL_NAME, DRIVER_FINALPOLPROV_FUNCTION)
+    WINTRUST_INITREGENTRY(DriverCleanupPolicy, SP_POLICY_PROVIDER_DLL_NAME, DRIVER_CLEANUPPOLICY_FUNCTION)
+    WINTRUST_INITREGENTRY(GenericChainCertificateTrust, SP_POLICY_PROVIDER_DLL_NAME, GENERIC_CHAIN_CERTTRUST_FUNCTION)
+    WINTRUST_INITREGENTRY(GenericChainFinalProv, SP_POLICY_PROVIDER_DLL_NAME, GENERIC_CHAIN_FINALPOLICY_FUNCTION)
+
+#undef WINTRUST_INITREGENTRY
+}
+
+/***********************************************************************
+ *              WINTRUST_FreeRegStructs
+ *
+ * Helper function to free 2 members of the CRYPT_TRUST_REG_ENTRY
+ * structs.
+ */
+static void WINTRUST_FreeRegStructs(void)
+{
+#define WINTRUST_FREEREGENTRY( action ) \
+    HeapFree(GetProcessHeap(), 0, action.pwszDLLName); \
+    HeapFree(GetProcessHeap(), 0, action.pwszFunctionName);
+
+    WINTRUST_FREEREGENTRY(SoftpubInitialization);
+    WINTRUST_FREEREGENTRY(SoftpubMessage);
+    WINTRUST_FREEREGENTRY(SoftpubSignature);
+    WINTRUST_FREEREGENTRY(SoftpubCertficate);
+    WINTRUST_FREEREGENTRY(SoftpubCertCheck);
+    WINTRUST_FREEREGENTRY(SoftpubFinalPolicy);
+    WINTRUST_FREEREGENTRY(SoftpubCleanup);
+    WINTRUST_FREEREGENTRY(SoftpubDefCertInit);
+    WINTRUST_FREEREGENTRY(SoftpubDumpStructure);
+    WINTRUST_FREEREGENTRY(HTTPSCertificateTrust);
+    WINTRUST_FREEREGENTRY(HTTPSFinalProv);
+    WINTRUST_FREEREGENTRY(OfficeInitializePolicy);
+    WINTRUST_FREEREGENTRY(OfficeCleanupPolicy);
+    WINTRUST_FREEREGENTRY(DriverInitializePolicy);
+    WINTRUST_FREEREGENTRY(DriverFinalPolicy);
+    WINTRUST_FREEREGENTRY(DriverCleanupPolicy);
+    WINTRUST_FREEREGENTRY(GenericChainCertificateTrust);
+    WINTRUST_FREEREGENTRY(GenericChainFinalProv);
+
+#undef WINTRUST_FREEREGENTRY
+}
+
+/***********************************************************************
+ *              WINTRUST_guid2wstr
+ *
+ * Create a wide-string from a GUID
+ *
+ */
+static void WINTRUST_Guid2Wstr(const GUID* pgActionID, WCHAR* GuidString)
+{ 
+    static const WCHAR wszFormat[] = {'{','%','0','8','l','X','-','%','0','4','X','-','%','0','4','X','-',
+                                      '%','0','2','X','%','0','2','X','-','%','0','2','X','%','0','2','X','%','0','2','X','%','0','2',
+                                      'X','%','0','2','X','%','0','2','X','}', 0};
+
+    wsprintfW(GuidString, wszFormat, pgActionID->Data1, pgActionID->Data2, pgActionID->Data3,
+        pgActionID->Data4[0], pgActionID->Data4[1], pgActionID->Data4[2], pgActionID->Data4[3],
+        pgActionID->Data4[4], pgActionID->Data4[5], pgActionID->Data4[6], pgActionID->Data4[7]);
+}
+
+/***********************************************************************
+ *              WINTRUST_WriteProviderToReg
+ *
+ * Helper function for WintrustAddActionID
+ *
+ */
+static LONG WINTRUST_WriteProviderToReg(WCHAR* GuidString,
+                                        const WCHAR* FunctionType,
+                                        CRYPT_TRUST_REG_ENTRY RegEntry)
+{
+    static const WCHAR Function[] = {'$','F','u','n','c','t','i','o','n', 0};
+    WCHAR ProvKey[MAX_PATH];
+    HKEY Key;
+    LONG Res = ERROR_SUCCESS;
+
+    /* Create the needed key string */
+    ProvKey[0]='\0';
+    lstrcatW(ProvKey, Trust);
+    lstrcatW(ProvKey, FunctionType);
+    lstrcatW(ProvKey, GuidString);
+
+    if (!RegEntry.pwszDLLName || !RegEntry.pwszFunctionName)
+        return ERROR_INVALID_PARAMETER;
+
+    Res = RegCreateKeyExW(HKEY_LOCAL_MACHINE, ProvKey, 0, NULL, 0, KEY_WRITE, NULL, &Key, NULL);
+    if (Res != ERROR_SUCCESS) goto error_close_key;
+
+    /* Create the $DLL entry */
+    Res = RegSetValueExW(Key, Dll, 0, REG_SZ, (BYTE*)RegEntry.pwszDLLName,
+        (lstrlenW(RegEntry.pwszDLLName) + 1)*sizeof(WCHAR));
+    if (Res != ERROR_SUCCESS) goto error_close_key;
+
+    /* Create the $Function entry */
+    Res = RegSetValueExW(Key, Function, 0, REG_SZ, (BYTE*)RegEntry.pwszFunctionName,
+        (lstrlenW(RegEntry.pwszFunctionName) + 1)*sizeof(WCHAR));
+
+error_close_key:
+    RegCloseKey(Key);
+
+    return Res;
+}
+
 /***********************************************************************
  *		WintrustAddActionID (WINTRUST.@)
+ *
+ * Add the definitions of the actions a Trust provider can perform to
+ * the registry.
+ *
+ * PARAMS
+ *   pgActionID [I] Pointer to a GUID for the Trust provider.
+ *   fdwFlags   [I] Flag to indicate whether registry errors are passed on.
+ *   psProvInfo [I] Pointer to a structure with information about DLL
+ *                  name and functions.
+ *
+ * RETURNS
+ *   Success: TRUE.
+ *   Failure: FALSE. (Use GetLastError() for more information)
+ *
+ * NOTES
+ *   Adding definitions is basically only adding relevant information
+ *   to the registry. No verification takes place whether a DLL or it's
+ *   entrypoints exist.
+ *   Information in the registry will always be overwritten.
+ *
  */
 BOOL WINAPI WintrustAddActionID( GUID* pgActionID, DWORD fdwFlags,
                                  CRYPT_REGISTER_ACTIONID* psProvInfo)
 {
-    FIXME("%p %lx %p\n", pgActionID, fdwFlags, psProvInfo);
-    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-    return FALSE;
+    WCHAR GuidString[39];
+    LONG Res;
+    LONG WriteActionError = ERROR_SUCCESS;
+
+    TRACE("%s %x %p\n", debugstr_guid(pgActionID), fdwFlags, psProvInfo);
+
+    /* Some sanity checks.
+     * We use the W2K3 last error as it makes more sense (W2K leaves the last error
+     * as is).
+     */
+    if (!pgActionID ||
+        !psProvInfo ||
+        (psProvInfo->cbStruct != sizeof(CRYPT_REGISTER_ACTIONID)))
+    {
+        SetLastError(ERROR_INVALID_PARAMETER);
+        return FALSE;
+    }
+
+    /* Create this string only once, instead of in the helper function */
+    WINTRUST_Guid2Wstr( pgActionID, GuidString);
+
+    /* Write the information to the registry */
+    Res = WINTRUST_WriteProviderToReg(GuidString, Initialization  , psProvInfo->sInitProvider);
+    if (Res != ERROR_SUCCESS) WriteActionError = Res;
+    Res = WINTRUST_WriteProviderToReg(GuidString, Message         , psProvInfo->sObjectProvider);
+    if (Res != ERROR_SUCCESS) WriteActionError = Res;
+    Res = WINTRUST_WriteProviderToReg(GuidString, Signature       , psProvInfo->sSignatureProvider);
+    if (Res != ERROR_SUCCESS) WriteActionError = Res;
+    Res = WINTRUST_WriteProviderToReg(GuidString, Certificate     , psProvInfo->sCertificateProvider);
+    if (Res != ERROR_SUCCESS) WriteActionError = Res;
+    Res = WINTRUST_WriteProviderToReg(GuidString, CertCheck       , psProvInfo->sCertificatePolicyProvider);
+    if (Res != ERROR_SUCCESS) WriteActionError = Res;
+    Res = WINTRUST_WriteProviderToReg(GuidString, FinalPolicy     , psProvInfo->sFinalPolicyProvider);
+    if (Res != ERROR_SUCCESS) WriteActionError = Res;
+    Res = WINTRUST_WriteProviderToReg(GuidString, DiagnosticPolicy, psProvInfo->sTestPolicyProvider);
+    if (Res != ERROR_SUCCESS) WriteActionError = Res;
+    Res = WINTRUST_WriteProviderToReg(GuidString, Cleanup         , psProvInfo->sCleanupProvider);
+    if (Res != ERROR_SUCCESS) WriteActionError = Res;
+
+    /* Testing (by restricting access to the registry for some keys) shows that the last failing function
+     * will be used for last error.
+     * If the flag WT_ADD_ACTION_ID_RET_RESULT_FLAG is set and there are errors when adding the action
+     * we have to return FALSE. Errors includes both invalid entries as well as registry errors.
+     * Testing also showed that one error doesn't stop the registry writes. Every action will be dealt with.
+     */
+
+    if (WriteActionError != ERROR_SUCCESS)
+    {
+        SetLastError(WriteActionError);
+
+        if (fdwFlags == WT_ADD_ACTION_ID_RET_RESULT_FLAG)
+            return FALSE;
+    }
+
+    return TRUE;
+}
+
+/***********************************************************************
+ *              WINTRUST_RemoveProviderFromReg
+ *
+ * Helper function for WintrustRemoveActionID
+ *
+ */
+static void WINTRUST_RemoveProviderFromReg(WCHAR* GuidString,
+                                           const WCHAR* FunctionType)
+{
+    WCHAR ProvKey[MAX_PATH];
+
+    /* Create the needed key string */
+    ProvKey[0]='\0';
+    lstrcatW(ProvKey, Trust);
+    lstrcatW(ProvKey, FunctionType);
+    lstrcatW(ProvKey, GuidString);
+
+    /* We don't care about success or failure */
+    RegDeleteKeyW(HKEY_LOCAL_MACHINE, ProvKey);
 }
 
 /***********************************************************************
  *              WintrustRemoveActionID (WINTRUST.@)
+ *
+ * Remove the definitions of the actions a Trust provider can perform
+ * from the registry.
+ *
+ * PARAMS
+ *   pgActionID [I] Pointer to a GUID for the Trust provider.
+ *
+ * RETURNS
+ *   Success: TRUE. (Use GetLastError() for more information)
+ *   Failure: FALSE. (Use GetLastError() for more information)
+ *
+ * NOTES
+ *   Testing shows that WintrustRemoveActionID always returns TRUE and
+ *   that a possible error should be retrieved via GetLastError().
+ *   There are no checks if the definitions are in the registry.
  */
 BOOL WINAPI WintrustRemoveActionID( GUID* pgActionID )
 {
-    FIXME("(%s)\n", debugstr_guid(pgActionID));
-    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-    return FALSE;
+    WCHAR GuidString[39];
+
+    TRACE("(%s)\n", debugstr_guid(pgActionID));
+ 
+    if (!pgActionID)
+    {
+        SetLastError(ERROR_INVALID_PARAMETER);
+        return TRUE;
+    }
+
+    /* Create this string only once, instead of in the helper function */
+    WINTRUST_Guid2Wstr( pgActionID, GuidString);
+
+    /* We don't care about success or failure */
+    WINTRUST_RemoveProviderFromReg(GuidString, Initialization);
+    WINTRUST_RemoveProviderFromReg(GuidString, Message);
+    WINTRUST_RemoveProviderFromReg(GuidString, Signature);
+    WINTRUST_RemoveProviderFromReg(GuidString, Certificate);
+    WINTRUST_RemoveProviderFromReg(GuidString, CertCheck);
+    WINTRUST_RemoveProviderFromReg(GuidString, FinalPolicy);
+    WINTRUST_RemoveProviderFromReg(GuidString, DiagnosticPolicy);
+    WINTRUST_RemoveProviderFromReg(GuidString, Cleanup);
+
+    return TRUE;
+}
+
+/***********************************************************************
+ *              WINTRUST_WriteSingleUsageEntry
+ *
+ * Helper for WintrustAddDefaultForUsage, writes a single value and its
+ * data to:
+ *
+ * HKLM\Software\Microsoft\Cryptography\Trust\Usages\<OID>
+ */
+static LONG WINTRUST_WriteSingleUsageEntry(LPCSTR OID,
+                                           const WCHAR* Value,
+                                           WCHAR* Data)
+{
+    static const WCHAR Usages[] = {'U','s','a','g','e','s','\\', 0};
+    WCHAR* UsageKey;
+    HKEY Key;
+    LONG Res = ERROR_SUCCESS;
+    WCHAR* OIDW;
+    DWORD Len;
+
+    /* Turn OID into a wide-character string */
+    Len = MultiByteToWideChar( CP_ACP, 0, OID, -1, NULL, 0 );
+    OIDW = HeapAlloc( GetProcessHeap(), 0, Len * sizeof(WCHAR) );
+    MultiByteToWideChar( CP_ACP, 0, OID, -1, OIDW, Len );
+
+    /* Allocate the needed space for UsageKey */
+    UsageKey = HeapAlloc(GetProcessHeap(), 0, (lstrlenW(Trust) + lstrlenW(Usages) + Len) * sizeof(WCHAR));
+    /* Create the key string */
+    lstrcpyW(UsageKey, Trust);
+    lstrcatW(UsageKey, Usages);
+    lstrcatW(UsageKey, OIDW);
+
+    Res = RegCreateKeyExW(HKEY_LOCAL_MACHINE, UsageKey, 0, NULL, 0, KEY_WRITE, NULL, &Key, NULL);
+    if (Res == ERROR_SUCCESS)
+    {
+        /* Create the Value entry */
+        Res = RegSetValueExW(Key, Value, 0, REG_SZ, (BYTE*)Data,
+                             (lstrlenW(Data) + 1)*sizeof(WCHAR));
+    }
+    RegCloseKey(Key);
+
+    HeapFree(GetProcessHeap(), 0, OIDW);
+    HeapFree(GetProcessHeap(), 0, UsageKey);
+
+    return Res;
+}
+
+/***************************************************************************
+ *              WINTRUST_RegisterGenVerifyV2
+ *
+ * Register WINTRUST_ACTION_GENERIC_VERIFY_V2 actions and usages.
+ *
+ * NOTES
+ *   WINTRUST_ACTION_GENERIC_VERIFY_V2 ({00AAC56B-CD44-11D0-8CC2-00C04FC295EE}
+ *   is defined in softpub.h
+ */
+static BOOL WINTRUST_RegisterGenVerifyV2(void)
+{
+    BOOL RegisteredOK = TRUE;
+    static GUID ProvGUID = WINTRUST_ACTION_GENERIC_VERIFY_V2;
+    CRYPT_REGISTER_ACTIONID ProvInfo = { sizeof(CRYPT_REGISTER_ACTIONID),
+                                         SoftpubInitialization,
+                                         SoftpubMessage,
+                                         SoftpubSignature,
+                                         SoftpubCertficate,
+                                         SoftpubCertCheck,
+                                         SoftpubFinalPolicy,
+                                         { 0, NULL, NULL }, /* No diagnostic policy */
+                                         SoftpubCleanup };
+    CRYPT_PROVIDER_REGDEFUSAGE DefUsage = { sizeof(CRYPT_PROVIDER_REGDEFUSAGE),
+                                            &ProvGUID,
+                                            NULL,   /* No Dll provided */
+                                            NULL,   /* No load callback function */
+                                            NULL }; /* No free callback function */
+
+    if (!WintrustAddDefaultForUsage(szOID_PKIX_KP_CODE_SIGNING, &DefUsage))
+        RegisteredOK = FALSE;
+
+    if (!WintrustAddActionID(&ProvGUID, 0, &ProvInfo))
+        RegisteredOK = FALSE;
+
+    return RegisteredOK;
+}
+
+/***************************************************************************
+ *              WINTRUST_RegisterPublishedSoftware
+ *
+ * Register WIN_SPUB_ACTION_PUBLISHED_SOFTWARE actions and usages.
+ *
+ * NOTES
+ *   WIN_SPUB_ACTION_PUBLISHED_SOFTWARE ({64B9D180-8DA2-11CF-8736-00AA00A485EB})
+ *   is defined in wintrust.h
+ */
+static BOOL WINTRUST_RegisterPublishedSoftware(void)
+{
+    static GUID ProvGUID = WIN_SPUB_ACTION_PUBLISHED_SOFTWARE;
+    CRYPT_REGISTER_ACTIONID ProvInfo = { sizeof(CRYPT_REGISTER_ACTIONID),
+                                         SoftpubInitialization,
+                                         SoftpubMessage,
+                                         SoftpubSignature,
+                                         SoftpubCertficate,
+                                         SoftpubCertCheck,
+                                         SoftpubFinalPolicy,
+                                         { 0, NULL, NULL }, /* No diagnostic policy */
+                                         SoftpubCleanup };
+
+    if (!WintrustAddActionID(&ProvGUID, 0, &ProvInfo))
+        return FALSE;
+
+    return TRUE;
+}
+
+#define WIN_SPUB_ACTION_PUBLISHED_SOFTWARE_NOBADUI { 0xc6b2e8d0, 0xe005, 0x11cf, { 0xa1,0x34,0x00,0xc0,0x4f,0xd7,0xbf,0x43 }}
+
+/***************************************************************************
+ *              WINTRUST_RegisterPublishedSoftwareNoBadUi
+ *
+ * Register WIN_SPUB_ACTION_PUBLISHED_SOFTWARE_NOBADUI actions and usages.
+ *
+ * NOTES
+ *   WIN_SPUB_ACTION_PUBLISHED_SOFTWARE_NOBADUI ({C6B2E8D0-E005-11CF-A134-00C04FD7BF43})
+ *   is not defined in any include file. (FIXME: Find out if the name is correct).
+ */
+static BOOL WINTRUST_RegisterPublishedSoftwareNoBadUi(void)
+{
+    static GUID ProvGUID = WIN_SPUB_ACTION_PUBLISHED_SOFTWARE_NOBADUI;
+    CRYPT_REGISTER_ACTIONID ProvInfo = { sizeof(CRYPT_REGISTER_ACTIONID),
+                                         SoftpubInitialization,
+                                         SoftpubMessage,
+                                         SoftpubSignature,
+                                         SoftpubCertficate,
+                                         SoftpubCertCheck,
+                                         SoftpubFinalPolicy,
+                                         { 0, NULL, NULL }, /* No diagnostic policy */
+                                         SoftpubCleanup };
+
+    if (!WintrustAddActionID(&ProvGUID, 0, &ProvInfo))
+        return FALSE;
+
+    return TRUE;
+}
+
+/***************************************************************************
+ *              WINTRUST_RegisterGenCertVerify
+ *
+ * Register WINTRUST_ACTION_GENERIC_CERT_VERIFY actions and usages.
+ *
+ * NOTES
+ *   WINTRUST_ACTION_GENERIC_CERT_VERIFY ({189A3842-3041-11D1-85E1-00C04FC295EE})
+ *   is defined in softpub.h
+ */
+static BOOL WINTRUST_RegisterGenCertVerify(void)
+{
+    static GUID ProvGUID = WINTRUST_ACTION_GENERIC_CERT_VERIFY;
+    CRYPT_REGISTER_ACTIONID ProvInfo = { sizeof(CRYPT_REGISTER_ACTIONID),
+                                         SoftpubDefCertInit,
+                                         SoftpubMessage,
+                                         SoftpubSignature,
+                                         SoftpubCertficate,
+                                         SoftpubCertCheck,
+                                         SoftpubFinalPolicy,
+                                         { 0, NULL, NULL }, /* No diagnostic policy */
+                                         SoftpubCleanup };
+
+    if (!WintrustAddActionID(&ProvGUID, 0, &ProvInfo))
+        return FALSE;
+
+    return TRUE;
+}
+
+/***************************************************************************
+ *              WINTRUST_RegisterTrustProviderTest
+ *
+ * Register WINTRUST_ACTION_TRUSTPROVIDER_TEST actions and usages.
+ *
+ * NOTES
+ *   WINTRUST_ACTION_TRUSTPROVIDER_TEST ({573E31F8-DDBA-11D0-8CCB-00C04FC295EE})
+ *   is defined in softpub.h
+ */
+static BOOL WINTRUST_RegisterTrustProviderTest(void)
+{
+    static GUID ProvGUID = WINTRUST_ACTION_TRUSTPROVIDER_TEST;
+    CRYPT_REGISTER_ACTIONID ProvInfo = { sizeof(CRYPT_REGISTER_ACTIONID),
+                                         SoftpubInitialization,
+                                         SoftpubMessage,
+                                         SoftpubSignature,
+                                         SoftpubCertficate,
+                                         SoftpubCertCheck,
+                                         SoftpubFinalPolicy,
+                                         SoftpubDumpStructure,
+                                         SoftpubCleanup };
+
+    if (!WintrustAddActionID(&ProvGUID, 0, &ProvInfo))
+        return FALSE;
+
+    return TRUE;
+}
+
+/***************************************************************************
+ *              WINTRUST_RegisterHttpsProv
+ *
+ * Register HTTPSPROV_ACTION actions and usages.
+ *
+ * NOTES
+ *   HTTPSPROV_ACTION ({573E31F8-AABA-11D0-8CCB-00C04FC295EE})
+ *   is defined in softpub.h
+ */
+static BOOL WINTRUST_RegisterHttpsProv(void)
+{
+    BOOL RegisteredOK = TRUE;
+    static CHAR SoftpubLoadUsage[] = "SoftpubLoadDefUsageCallData";
+    static CHAR SoftpubFreeUsage[] = "SoftpubFreeDefUsageCallData";
+    static GUID ProvGUID = HTTPSPROV_ACTION;
+    CRYPT_REGISTER_ACTIONID ProvInfo = { sizeof(CRYPT_REGISTER_ACTIONID),
+                                         SoftpubInitialization,
+                                         SoftpubMessage,
+                                         SoftpubSignature,
+                                         HTTPSCertificateTrust,
+                                         SoftpubCertCheck,
+                                         HTTPSFinalProv,
+                                         { 0, NULL, NULL }, /* No diagnostic policy */
+                                         SoftpubCleanup };
+    CRYPT_PROVIDER_REGDEFUSAGE DefUsage = { sizeof(CRYPT_PROVIDER_REGDEFUSAGE),
+                                            &ProvGUID,
+                                            NULL, /* Will be filled later */
+                                            SoftpubLoadUsage,
+                                            SoftpubFreeUsage };
+
+    DefUsage.pwszDllName = HeapAlloc(GetProcessHeap(), 0, sizeof(SP_POLICY_PROVIDER_DLL_NAME));
+    lstrcpyW(DefUsage.pwszDllName, SP_POLICY_PROVIDER_DLL_NAME);
+
+    if (!WintrustAddDefaultForUsage(szOID_PKIX_KP_SERVER_AUTH, &DefUsage))
+        RegisteredOK = FALSE;
+    if (!WintrustAddDefaultForUsage(szOID_PKIX_KP_CLIENT_AUTH, &DefUsage))
+        RegisteredOK = FALSE;
+    if (!WintrustAddDefaultForUsage(szOID_SERVER_GATED_CRYPTO, &DefUsage))
+        RegisteredOK = FALSE;
+    if (!WintrustAddDefaultForUsage(szOID_SGC_NETSCAPE, &DefUsage))
+        RegisteredOK = FALSE;
+
+    HeapFree(GetProcessHeap(), 0, DefUsage.pwszDllName);
+
+    if (!WintrustAddActionID(&ProvGUID, 0, &ProvInfo))
+        RegisteredOK = FALSE;
+
+    return RegisteredOK;
+}
+
+/***************************************************************************
+ *              WINTRUST_RegisterOfficeSignVerify
+ *
+ * Register OFFICESIGN_ACTION_VERIFY actions and usages.
+ *
+ * NOTES
+ *   OFFICESIGN_ACTION_VERIFY ({5555C2CD-17FB-11D1-85C4-00C04FC295EE})
+ *   is defined in softpub.h
+ */
+static BOOL WINTRUST_RegisterOfficeSignVerify(void)
+{
+    static GUID ProvGUID = OFFICESIGN_ACTION_VERIFY;
+    CRYPT_REGISTER_ACTIONID ProvInfo = { sizeof(CRYPT_REGISTER_ACTIONID),
+                                         OfficeInitializePolicy,
+                                         SoftpubMessage,
+                                         SoftpubSignature,
+                                         SoftpubCertficate,
+                                         SoftpubCertCheck,
+                                         SoftpubFinalPolicy,
+                                         { 0, NULL, NULL }, /* No diagnostic policy */
+                                         OfficeCleanupPolicy };
+
+    if (!WintrustAddActionID(&ProvGUID, 0, &ProvInfo))
+        return FALSE;
+
+    return TRUE;
+}
+
+/***************************************************************************
+ *              WINTRUST_RegisterDriverVerify
+ *
+ * Register DRIVER_ACTION_VERIFY actions and usages.
+ *
+ * NOTES
+ *   DRIVER_ACTION_VERIFY ({F750E6C3-38EE-11D1-85E5-00C04FC295EE})
+ *   is defined in softpub.h
+ */
+static BOOL WINTRUST_RegisterDriverVerify(void)
+{
+    static GUID ProvGUID = DRIVER_ACTION_VERIFY;
+    CRYPT_REGISTER_ACTIONID ProvInfo = { sizeof(CRYPT_REGISTER_ACTIONID),
+                                         DriverInitializePolicy,
+                                         SoftpubMessage,
+                                         SoftpubSignature,
+                                         SoftpubCertficate,
+                                         SoftpubCertCheck,
+                                         DriverFinalPolicy,
+                                         { 0, NULL, NULL }, /* No diagnostic policy */
+                                         DriverCleanupPolicy };
+
+    if (!WintrustAddActionID(&ProvGUID, 0, &ProvInfo))
+        return FALSE;
+
+    return TRUE;
+}
+
+/***************************************************************************
+ *              WINTRUST_RegisterGenChainVerify
+ *
+ * Register WINTRUST_ACTION_GENERIC_CHAIN_VERIFY actions and usages.
+ *
+ * NOTES
+ *   WINTRUST_ACTION_GENERIC_CHAIN_VERIFY ({FC451C16-AC75-11D1-B4B8-00C04FB66EA0})
+ *   is defined in softpub.h
+ */
+static BOOL WINTRUST_RegisterGenChainVerify(void)
+{
+    static GUID ProvGUID = WINTRUST_ACTION_GENERIC_CHAIN_VERIFY;
+    CRYPT_REGISTER_ACTIONID ProvInfo = { sizeof(CRYPT_REGISTER_ACTIONID),
+                                         SoftpubInitialization,
+                                         SoftpubMessage,
+                                         SoftpubSignature,
+                                         GenericChainCertificateTrust,
+                                         SoftpubCertCheck,
+                                         GenericChainFinalProv,
+                                         { 0, NULL, NULL }, /* No diagnostic policy */
+                                         SoftpubCleanup };
+
+    if (!WintrustAddActionID(&ProvGUID, 0, &ProvInfo))
+        return FALSE;
+
+    return TRUE;
+}
+
+/***********************************************************************
+ *              WintrustAddDefaultForUsage (WINTRUST.@)
+ *
+ * Write OID and callback functions to the registry.
+ *
+ * PARAMS
+ *   pszUsageOID [I] Pointer to a GUID.
+ *   psDefUsage  [I] Pointer to a structure that specifies the callback functions.
+ *
+ * RETURNS
+ *   Success: TRUE.
+ *   Failure: FALSE.
+ *
+ * NOTES
+ *   WintrustAddDefaultForUsage will only return TRUE or FALSE, no last 
+ *   error is set, not even when the registry cannot be written to.
+ */
+BOOL WINAPI WintrustAddDefaultForUsage(const char *pszUsageOID,
+                                       CRYPT_PROVIDER_REGDEFUSAGE *psDefUsage)
+{
+    static const WCHAR CBAlloc[]    = {'C','a','l','l','b','a','c','k','A','l','l','o','c','F','u','n','c','t','i','o','n', 0};
+    static const WCHAR CBFree[]     = {'C','a','l','l','b','a','c','k','F','r','e','e','F','u','n','c','t','i','o','n', 0};
+    LONG Res = ERROR_SUCCESS;
+    LONG WriteUsageError = ERROR_SUCCESS;
+    DWORD Len;
+    WCHAR GuidString[39];
+
+    TRACE("(%s %p)\n", debugstr_a(pszUsageOID), psDefUsage);
+
+    /* Some sanity checks. */
+    if (!pszUsageOID ||
+        !psDefUsage ||
+        !psDefUsage->pgActionID ||
+        (psDefUsage->cbStruct != sizeof(CRYPT_PROVIDER_REGDEFUSAGE)))
+    {
+        SetLastError(ERROR_INVALID_PARAMETER);
+        return FALSE;
+    }
+
+    if (psDefUsage->pwszDllName)
+    {
+        Res = WINTRUST_WriteSingleUsageEntry(pszUsageOID, Dll, psDefUsage->pwszDllName);
+        if (Res != ERROR_SUCCESS) WriteUsageError = Res;
+    }
+    if (psDefUsage->pwszLoadCallbackDataFunctionName)
+    {
+        WCHAR* CallbackW;
+
+        Len = MultiByteToWideChar( CP_ACP, 0, psDefUsage->pwszLoadCallbackDataFunctionName, -1, NULL, 0 );
+        CallbackW = HeapAlloc( GetProcessHeap(), 0, Len * sizeof(WCHAR) );
+        MultiByteToWideChar( CP_ACP, 0, psDefUsage->pwszLoadCallbackDataFunctionName, -1, CallbackW, Len );
+
+        Res = WINTRUST_WriteSingleUsageEntry(pszUsageOID, CBAlloc, CallbackW);
+        if (Res != ERROR_SUCCESS) WriteUsageError = Res;
+
+        HeapFree(GetProcessHeap(), 0, CallbackW);
+    }
+    if (psDefUsage->pwszFreeCallbackDataFunctionName)
+    {
+        WCHAR* CallbackW;
+
+        Len = MultiByteToWideChar( CP_ACP, 0, psDefUsage->pwszFreeCallbackDataFunctionName, -1, NULL, 0 );
+        CallbackW = HeapAlloc( GetProcessHeap(), 0, Len * sizeof(WCHAR) );
+        MultiByteToWideChar( CP_ACP, 0, psDefUsage->pwszFreeCallbackDataFunctionName, -1, CallbackW, Len );
+
+        Res = WINTRUST_WriteSingleUsageEntry(pszUsageOID, CBFree, CallbackW);
+        if (Res != ERROR_SUCCESS) WriteUsageError = Res;
+
+        HeapFree(GetProcessHeap(), 0, CallbackW);
+    }
+
+    WINTRUST_Guid2Wstr(psDefUsage->pgActionID, GuidString);
+    Res = WINTRUST_WriteSingleUsageEntry(pszUsageOID, DefaultId, GuidString);
+    if (Res != ERROR_SUCCESS) WriteUsageError = Res;
+
+    if (WriteUsageError != ERROR_SUCCESS)
+        return FALSE;
+
+    return TRUE;
+}
+
+/***********************************************************************
+ *              WINTRUST_SIPPAddProvider
+ *
+ * Helper for DllRegisterServer.
+ */
+static BOOL WINTRUST_SIPPAddProvider(GUID* Subject, WCHAR* MagicNumber)
+{
+    static WCHAR CryptSIPGetSignedDataMsg[] =
+        {'C','r','y','p','t','S','I','P','G','e','t','S','i','g','n','e','d','D','a','t','a','M','s','g', 0};
+    static WCHAR CryptSIPPutSignedDataMsg[] =
+        {'C','r','y','p','t','S','I','P','P','u','t','S','i','g','n','e','d','D','a','t','a','M','s','g', 0};
+    static WCHAR CryptSIPCreateIndirectData[] =
+        {'C','r','y','p','t','S','I','P','C','r','e','a','t','e','I','n','d','i','r','e','c','t','D','a','t','a', 0};
+    static WCHAR CryptSIPVerifyIndirectData[] =
+        {'C','r','y','p','t','S','I','P','V','e','r','i','f','y','I','n','d','i','r','e','c','t','D','a','t','a', 0};
+    static WCHAR CryptSIPRemoveSignedDataMsg[] =
+        {'C','r','y','p','t','S','I','P','R','e','m','o','v','e','S','i','g','n','e','d','D','a','t','a','M','s','g', 0};
+    SIP_ADD_NEWPROVIDER NewProv;
+    BOOL Ret;
+
+    /* Clear and initialize the structure */
+    memset(&NewProv, 0, sizeof(SIP_ADD_NEWPROVIDER));
+    NewProv.cbStruct = sizeof(SIP_ADD_NEWPROVIDER);
+    NewProv.pwszDLLFileName = HeapAlloc(GetProcessHeap(), 0, sizeof(SP_POLICY_PROVIDER_DLL_NAME));
+    /* Fill the structure */
+    NewProv.pgSubject              = Subject;
+    lstrcpyW(NewProv.pwszDLLFileName, SP_POLICY_PROVIDER_DLL_NAME);
+    NewProv.pwszMagicNumber        = MagicNumber;
+    NewProv.pwszIsFunctionName     = NULL;
+    NewProv.pwszGetFuncName        = CryptSIPGetSignedDataMsg;
+    NewProv.pwszPutFuncName        = CryptSIPPutSignedDataMsg;
+    NewProv.pwszCreateFuncName     = CryptSIPCreateIndirectData;
+    NewProv.pwszVerifyFuncName     = CryptSIPVerifyIndirectData;
+    NewProv.pwszRemoveFuncName     = CryptSIPRemoveSignedDataMsg;
+    NewProv.pwszIsFunctionNameFmt2 = NULL;
+
+    Ret = CryptSIPAddProvider(&NewProv);
+
+    HeapFree(GetProcessHeap(), 0, NewProv.pwszDLLFileName);
+ 
+    return Ret;
 }
 
 /***********************************************************************
  *              DllRegisterServer (WINTRUST.@)
  */
 HRESULT WINAPI DllRegisterServer(void)
+{
+    static const CHAR SpcPeImageDataEncode[]           = "WVTAsn1SpcPeImageDataEncode";
+    static const CHAR SpcPeImageDataDecode[]           = "WVTAsn1SpcPeImageDataDecode";
+    static const CHAR SpcLinkEncode[]                  = "WVTAsn1SpcLinkEncode";
+    static const CHAR SpcLinkDecode[]                  = "WVTAsn1SpcLinkDecode";
+    static const CHAR SpcSigInfoEncode[]               = "WVTAsn1SpcSigInfoEncode";
+    static const CHAR SpcSigInfoDecode[]               = "WVTAsn1SpcSigInfoDecode";
+    static const CHAR SpcIndirectDataContentEncode[]   = "WVTAsn1SpcIndirectDataContentEncode";
+    static const CHAR SpcIndirectDataContentDecode[]   = "WVTAsn1SpcIndirectDataContentDecode";
+    static const CHAR SpcSpAgencyInfoEncode[]          = "WVTAsn1SpcSpAgencyInfoEncode";
+    static const CHAR SpcSpAgencyInfoDecode[]          = "WVTAsn1SpcSpAgencyInfoDecode";
+    static const CHAR SpcMinimalCriteriaInfoEncode[]   = "WVTAsn1SpcMinimalCriteriaInfoEncode";
+    static const CHAR SpcMinimalCriteriaInfoDecode[]   = "WVTAsn1SpcMinimalCriteriaInfoDecode";
+    static const CHAR SpcFinancialCriteriaInfoEncode[] = "WVTAsn1SpcFinancialCriteriaInfoEncode";
+    static const CHAR SpcFinancialCriteriaInfoDecode[] = "WVTAsn1SpcFinancialCriteriaInfoDecode";
+    static const CHAR SpcStatementTypeEncode[]         = "WVTAsn1SpcStatementTypeEncode";
+    static const CHAR SpcStatementTypeDecode[]         = "WVTAsn1SpcStatementTypeDecode";
+    static const CHAR CatNameValueEncode[]             = "WVTAsn1CatNameValueEncode";
+    static const CHAR CatNameValueDecode[]             = "WVTAsn1CatNameValueDecode";
+    static const CHAR CatMemberInfoEncode[]            = "WVTAsn1CatMemberInfoEncode";
+    static const CHAR CatMemberInfoDecode[]            = "WVTAsn1CatMemberInfoDecode";
+    static const CHAR SpcSpOpusInfoEncode[]            = "WVTAsn1SpcSpOpusInfoEncode";
+    static const CHAR SpcSpOpusInfoDecode[]            = "WVTAsn1SpcSpOpusInfoDecode";
+    static GUID Unknown1 = { 0xDE351A42, 0x8E59, 0x11D0, { 0x8C,0x47,0x00,0xC0,0x4F,0xC2,0x95,0xEE }};
+    static GUID Unknown2 = { 0xC689AABA, 0x8E78, 0x11D0, { 0x8C,0x47,0x00,0xC0,0x4F,0xC2,0x95,0xEE }};
+    static GUID Unknown3 = { 0xC689AAB8, 0x8E78, 0x11D0, { 0x8C,0x47,0x00,0xC0,0x4F,0xC2,0x95,0xEE }};
+    static GUID Unknown4 = { 0xC689AAB9, 0x8E78, 0x11D0, { 0x8C,0x47,0x00,0xC0,0x4F,0xC2,0x95,0xEE }};
+    static GUID Unknown5 = { 0xDE351A43, 0x8E59, 0x11D0, { 0x8C,0x47,0x00,0xC0,0x4F,0xC2,0x95,0xEE }};
+    static GUID Unknown6 = { 0x9BA61D3F, 0xE73A, 0x11D0, { 0x8C,0xD2,0x00,0xC0,0x4F,0xC2,0x95,0xEE }};
+    static WCHAR MagicNumber2[] = {'M','S','C','F', 0};
+    static WCHAR MagicNumber3[] = {'0','x','0','0','0','0','4','5','5','0', 0};
+    static WCHAR CafeBabe[] = {'0','x','c','a','f','e','b','a','b','e', 0};
+
+    HRESULT CryptRegisterRes = S_OK;
+    HRESULT TrustProviderRes = S_OK;
+    HRESULT SIPAddProviderRes = S_OK;
+
+    TRACE("\n");
+
+    /* Testing on native shows that when an error is encountered in one of the CryptRegisterOIDFunction calls
+     * the rest of these calls is skipped. Registering is however continued for the trust providers.
+     *
+     * We are not totally in line with native as there all decoding functions are registered after all encoding
+     * functions.
+     */
+#define WINTRUST_REGISTEROID( oid, encode_funcname, decode_funcname ) \
+    do { \
+        if (!CryptRegisterOIDFunction(X509_ASN_ENCODING, CRYPT_OID_ENCODE_OBJECT_FUNC, oid, SP_POLICY_PROVIDER_DLL_NAME, encode_funcname)) \
+        {                                                               \
+            CryptRegisterRes = HRESULT_FROM_WIN32(GetLastError());      \
+            goto add_trust_providers;                                   \
+        }                                                               \
+        if (!CryptRegisterOIDFunction(X509_ASN_ENCODING, CRYPT_OID_DECODE_OBJECT_FUNC, oid, SP_POLICY_PROVIDER_DLL_NAME, decode_funcname)) \
+        {                                                               \
+            CryptRegisterRes = HRESULT_FROM_WIN32(GetLastError());      \
+            goto add_trust_providers;                                   \
+        }                                                               \
+    } while (0)
+
+    WINTRUST_REGISTEROID(SPC_PE_IMAGE_DATA_OBJID, SpcPeImageDataEncode, SpcPeImageDataDecode);
+    WINTRUST_REGISTEROID(SPC_PE_IMAGE_DATA_STRUCT, SpcPeImageDataEncode, SpcPeImageDataDecode);
+    WINTRUST_REGISTEROID(SPC_CAB_DATA_OBJID, SpcLinkEncode, SpcLinkDecode);
+    WINTRUST_REGISTEROID(SPC_CAB_DATA_STRUCT, SpcLinkEncode, SpcLinkDecode);
+    WINTRUST_REGISTEROID(SPC_JAVA_CLASS_DATA_OBJID, SpcLinkEncode, SpcLinkDecode);
+    WINTRUST_REGISTEROID(SPC_JAVA_CLASS_DATA_STRUCT, SpcLinkEncode, SpcLinkDecode);
+    WINTRUST_REGISTEROID(SPC_LINK_OBJID, SpcLinkEncode, SpcLinkDecode);
+    WINTRUST_REGISTEROID(SPC_LINK_STRUCT, SpcLinkEncode, SpcLinkDecode);
+    WINTRUST_REGISTEROID(SPC_SIGINFO_OBJID, SpcSigInfoEncode, SpcSigInfoDecode);
+    WINTRUST_REGISTEROID(SPC_SIGINFO_STRUCT, SpcSigInfoEncode, SpcSigInfoDecode);
+    WINTRUST_REGISTEROID(SPC_INDIRECT_DATA_OBJID, SpcIndirectDataContentEncode, SpcIndirectDataContentDecode);
+    WINTRUST_REGISTEROID(SPC_INDIRECT_DATA_CONTENT_STRUCT, SpcIndirectDataContentEncode, SpcIndirectDataContentDecode);
+    WINTRUST_REGISTEROID(SPC_SP_AGENCY_INFO_OBJID, SpcSpAgencyInfoEncode, SpcSpAgencyInfoDecode);
+    WINTRUST_REGISTEROID(SPC_SP_AGENCY_INFO_STRUCT, SpcSpAgencyInfoEncode, SpcSpAgencyInfoDecode);
+    WINTRUST_REGISTEROID(SPC_MINIMAL_CRITERIA_OBJID, SpcMinimalCriteriaInfoEncode, SpcMinimalCriteriaInfoDecode);
+    WINTRUST_REGISTEROID(SPC_MINIMAL_CRITERIA_STRUCT, SpcMinimalCriteriaInfoEncode, SpcMinimalCriteriaInfoDecode);
+    WINTRUST_REGISTEROID(SPC_FINANCIAL_CRITERIA_OBJID, SpcFinancialCriteriaInfoEncode, SpcFinancialCriteriaInfoDecode);
+    WINTRUST_REGISTEROID(SPC_FINANCIAL_CRITERIA_STRUCT, SpcFinancialCriteriaInfoEncode, SpcFinancialCriteriaInfoDecode);
+    WINTRUST_REGISTEROID(SPC_STATEMENT_TYPE_OBJID, SpcStatementTypeEncode, SpcStatementTypeDecode);
+    WINTRUST_REGISTEROID(SPC_STATEMENT_TYPE_STRUCT, SpcStatementTypeEncode, SpcStatementTypeDecode);
+    WINTRUST_REGISTEROID(CAT_NAMEVALUE_OBJID, CatNameValueEncode, CatNameValueDecode);
+    WINTRUST_REGISTEROID(CAT_NAMEVALUE_STRUCT, CatNameValueEncode, CatNameValueDecode);
+    WINTRUST_REGISTEROID(CAT_MEMBERINFO_OBJID, CatMemberInfoEncode, CatMemberInfoDecode);
+    WINTRUST_REGISTEROID(CAT_MEMBERINFO_STRUCT, CatMemberInfoEncode, CatMemberInfoDecode);
+    WINTRUST_REGISTEROID(SPC_SP_OPUS_INFO_OBJID, SpcSpOpusInfoEncode, SpcSpOpusInfoDecode);
+    WINTRUST_REGISTEROID(SPC_SP_OPUS_INFO_STRUCT, SpcSpOpusInfoEncode,  SpcSpOpusInfoDecode);
+
+#undef WINTRUST_REGISTEROID
+
+add_trust_providers:
+
+    /* Testing on W2K3 shows:
+     * All registry writes are tried. If one fails this part will return S_FALSE.
+     *
+     * Last error is set to the last error encountered, regardless if the first
+     * part failed or not.
+     */
+
+    /* Create the necessary action registry structures */
+    WINTRUST_InitRegStructs();
+
+    /* Register several Trust Provider actions */
+    if (!WINTRUST_RegisterGenVerifyV2())
+        TrustProviderRes = S_FALSE;
+    if (!WINTRUST_RegisterPublishedSoftware())
+        TrustProviderRes = S_FALSE;
+    if (!WINTRUST_RegisterPublishedSoftwareNoBadUi())
+        TrustProviderRes = S_FALSE;
+    if (!WINTRUST_RegisterGenCertVerify())
+        TrustProviderRes = S_FALSE;
+    if (!WINTRUST_RegisterTrustProviderTest())
+        TrustProviderRes = S_FALSE;
+    if (!WINTRUST_RegisterHttpsProv())
+        TrustProviderRes = S_FALSE;
+    if (!WINTRUST_RegisterOfficeSignVerify())
+        TrustProviderRes = S_FALSE;
+    if (!WINTRUST_RegisterDriverVerify())
+        TrustProviderRes = S_FALSE;
+    if (!WINTRUST_RegisterGenChainVerify())
+        TrustProviderRes = S_FALSE;
+
+    /* Free the registry structures */
+    WINTRUST_FreeRegStructs();
+
+    /* Testing on W2K3 shows:
+     * All registry writes are tried. If one fails this part will return S_FALSE.
+     *
+     * Last error is set to the last error encountered, regardless if the previous
+     * parts failed or not.
+     */
+
+    if (!WINTRUST_SIPPAddProvider(&Unknown1, NULL))
+        SIPAddProviderRes = S_FALSE;
+    if (!WINTRUST_SIPPAddProvider(&Unknown2, MagicNumber2))
+        SIPAddProviderRes = S_FALSE;
+    if (!WINTRUST_SIPPAddProvider(&Unknown3, MagicNumber3))
+        SIPAddProviderRes = S_FALSE;
+    if (!WINTRUST_SIPPAddProvider(&Unknown4, CafeBabe))
+        SIPAddProviderRes = S_FALSE;
+    if (!WINTRUST_SIPPAddProvider(&Unknown5, CafeBabe))
+        SIPAddProviderRes = S_FALSE;
+    if (!WINTRUST_SIPPAddProvider(&Unknown6, CafeBabe))
+        SIPAddProviderRes = S_FALSE;
+
+    /* Native does a CryptSIPRemoveProvider here for {941C2937-1292-11D1-85BE-00C04FC295EE}.
+     * This SIP Provider is however not found on up-to-date window install and native will
+     * set the last error to ERROR_FILE_NOT_FOUND.
+     * Wine has the last error set to ERROR_INVALID_PARAMETER. There shouldn't be an app
+     * depending on this last error though so there is no need to imitate native to the full extent.
+     *
+     * (The ERROR_INVALID_PARAMETER for Wine it totally valid as we (and native) do register
+     * a trust provider without a diagnostic policy).
+     */
+
+    /* If CryptRegisterRes is not S_OK it will always overrule the return value. */
+    if (CryptRegisterRes != S_OK)
+        return CryptRegisterRes;
+    else if (SIPAddProviderRes == S_OK)
+        return TrustProviderRes;
+    else 
+        return SIPAddProviderRes;
+}
+
+/***********************************************************************
+ *              DllUnregisterServer (WINTRUST.@)
+ */
+HRESULT WINAPI DllUnregisterServer(void)
 {
      FIXME("stub\n");
      return S_OK;
 }
 
 /***********************************************************************
- *              DllUnregisterServer (WINTRUST.@)
- */
-HRESULT WINAPI DllUnregisterServer(void)
+ *              SoftpubDllRegisterServer (WINTRUST.@)
+ *
+ * Registers softpub.dll
+ *
+ * PARAMS
+ *
+ * RETURNS
+ *  Success: S_OK.
+ *  Failure: S_FALSE. (See also GetLastError()).
+ *
+ * NOTES
+ *  DllRegisterServer in softpub.dll will call this function.
+ *  See comments in DllRegisterServer.
+ */
+HRESULT WINAPI SoftpubDllRegisterServer(void)
+{
+    HRESULT TrustProviderRes = S_OK;
+
+    TRACE("\n");
+
+    /* Create the necessary action registry structures */
+    WINTRUST_InitRegStructs();
+
+    /* Register several Trust Provider actions */
+    if (!WINTRUST_RegisterGenVerifyV2())
+        TrustProviderRes = S_FALSE;
+    if (!WINTRUST_RegisterPublishedSoftware())
+        TrustProviderRes = S_FALSE;
+    if (!WINTRUST_RegisterPublishedSoftwareNoBadUi())
+        TrustProviderRes = S_FALSE;
+    if (!WINTRUST_RegisterGenCertVerify())
+        TrustProviderRes = S_FALSE;
+    if (!WINTRUST_RegisterTrustProviderTest())
+        TrustProviderRes = S_FALSE;
+    if (!WINTRUST_RegisterHttpsProv())
+        TrustProviderRes = S_FALSE;
+    if (!WINTRUST_RegisterOfficeSignVerify())
+        TrustProviderRes = S_FALSE;
+    if (!WINTRUST_RegisterDriverVerify())
+        TrustProviderRes = S_FALSE;
+    if (!WINTRUST_RegisterGenChainVerify())
+        TrustProviderRes = S_FALSE;
+
+    /* Free the registry structures */
+    WINTRUST_FreeRegStructs();
+
+    return TrustProviderRes;
+}
+
+/***********************************************************************
+ *              SoftpubDllUnregisterServer (WINTRUST.@)
+ */
+HRESULT WINAPI SoftpubDllUnregisterServer(void)
 {
      FIXME("stub\n");
      return S_OK;
 }
 
 /***********************************************************************
- *              SoftpubDllRegisterServer (WINTRUST.@)
- */
-HRESULT WINAPI SoftpubDllRegisterServer(void)
+ *              mscat32DllRegisterServer (WINTRUST.@)
+ */
+HRESULT WINAPI mscat32DllRegisterServer(void)
 {
      FIXME("stub\n");
      return S_OK;
 }
 
 /***********************************************************************
- *              SoftpubDllUnregisterServer (WINTRUST.@)
- */
-HRESULT WINAPI SoftpubDllUnregisterServer(void)
+ *              mscat32DllUnregisterServer (WINTRUST.@)
+ */
+HRESULT WINAPI mscat32DllUnregisterServer(void)
 {
      FIXME("stub\n");
      return S_OK;
 }
 
 /***********************************************************************
- *              mscat32DllRegisterServer (WINTRUST.@)
- */
-HRESULT WINAPI mscat32DllRegisterServer(void)
+ *              mssip32DllRegisterServer (WINTRUST.@)
+ */
+HRESULT WINAPI mssip32DllRegisterServer(void)
 {
      FIXME("stub\n");
      return S_OK;
 }
 
 /***********************************************************************
- *              mscat32DllUnregisterServer (WINTRUST.@)
- */
-HRESULT WINAPI mscat32DllUnregisterServer(void)
+ *              mssip32DllUnregisterServer (WINTRUST.@)
+ */
+HRESULT WINAPI mssip32DllUnregisterServer(void)
 {
      FIXME("stub\n");
      return S_OK;
 }
-
-/***********************************************************************
- *              mssip32DllRegisterServer (WINTRUST.@)
- */
-HRESULT WINAPI mssip32DllRegisterServer(void)
-{
-     FIXME("stub\n");
-     return S_OK;
-}
-
-/***********************************************************************
- *              mssip32DllUnregisterServer (WINTRUST.@)
- */
-HRESULT WINAPI mssip32DllUnregisterServer(void)
-{
-     FIXME("stub\n");
-     return S_OK;
-}

Modified: trunk/reactos/dll/win32/wintrust/wintrust.rbuild
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/wintrust/wintrust.rbuild?rev=26520&r1=26519&r2=26520&view=diff
==============================================================================
--- trunk/reactos/dll/win32/wintrust/wintrust.rbuild (original)
+++ trunk/reactos/dll/win32/wintrust/wintrust.rbuild Thu Apr 26 17:38:13 2007
@@ -1,4 +1,5 @@
 <module name="wintrust" type="win32dll" baseaddress="${BASEADDRESS_WINTRUST}" installbase="system32" installname="wintrust.dll" allowwarnings="true">
+	<autoregister infsection="OleControlDlls" type="DllRegisterServer" />
 	<importlibrary definition="wintrust.spec.def" />
 	<include base="wintrust">.</include>
 	<include base="ReactOS">include/reactos/wine</include>
@@ -10,8 +11,11 @@
 	<define name="WINVER">0x501</define>
 	<library>wine</library>
 	<library>crypt32</library>
+	<library>user32</library>
+	<library>advapi32</library>
 	<library>kernel32</library>
 	<library>ntdll</library>
+	<file>crypt.c</file>
 	<file>register.c</file>
 	<file>wintrust_main.c</file>
 	<file>version.rc</file>

Modified: trunk/reactos/dll/win32/wintrust/wintrust.spec
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/wintrust/wintrust.spec?rev=26520&r1=26519&r2=26520&view=diff
==============================================================================
--- trunk/reactos/dll/win32/wintrust/wintrust.spec (original)
+++ trunk/reactos/dll/win32/wintrust/wintrust.spec Thu Apr 26 17:38:13 2007
@@ -7,7 +7,7 @@
 @ stub CryptCATAdminPauseServiceForBackup
 @ stub CryptCATAdminReleaseCatalogContext
 @ stdcall CryptCATAdminReleaseContext(long long)
-@ stub CryptCATAdminRemoveCatalog
+@ stdcall CryptCATAdminRemoveCatalog(ptr wstr long)
 @ stub CryptCATAdminResolveCatalogPath
 @ stub CryptCATCDFClose
 @ stub CryptCATCDFEnumAttributes
@@ -18,28 +18,28 @@
 @ stub CryptCATCDFEnumMembersByCDFTagEx
 @ stub CryptCATCDFOpen
 @ stub CryptCATCatalogInfoFromContext
-@ stub CryptCATClose
+@ stdcall CryptCATClose(long)
 @ stub CryptCATEnumerateAttr
 @ stub CryptCATEnumerateCatAttr
-@ stub CryptCATEnumerateMember
+@ stdcall CryptCATEnumerateMember(long ptr)
 @ stub CryptCATGetAttrInfo
 @ stub CryptCATGetCatAttrInfo
 @ stub CryptCATGetMemberInfo
 @ stub CryptCATHandleFromStore
-@ stub CryptCATOpen
+@ stdcall CryptCATOpen(wstr long long long long)
 @ stub CryptCATPersistStore
 @ stub CryptCATPutAttrInfo
 @ stub CryptCATPutCatAttrInfo
 @ stub CryptCATPutMemberInfo
 @ stub CryptCATStoreFromHandle
 @ stub CryptCATVerifyMember
-@ stub CryptSIPCreateIndirectData
+@ stdcall CryptSIPCreateIndirectData(ptr ptr ptr)
 @ stub CryptSIPGetInfo
 @ stub CryptSIPGetRegWorkingFlags
-@ stub CryptSIPGetSignedDataMsg
-@ stub CryptSIPPutSignedDataMsg
-@ stub CryptSIPRemoveSignedDataMsg
-@ stub CryptSIPVerifyIndirectData
+@ stdcall CryptSIPGetSignedDataMsg(ptr ptr long ptr ptr)
+@ stdcall CryptSIPPutSignedDataMsg(ptr long ptr long ptr)
+@ stdcall CryptSIPRemoveSignedDataMsg(ptr long)
+@ stdcall CryptSIPVerifyIndirectData(ptr ptr)
 @ stdcall -private DllRegisterServer()
 @ stdcall -private DllUnregisterServer()
 @ stub DriverCleanupPolicy
@@ -111,7 +111,7 @@
 @ stdcall WinVerifyTrust(long ptr ptr)
 @ stdcall WinVerifyTrustEx(long ptr ptr)
 @ stdcall WintrustAddActionID(ptr long ptr)
-@ stub WintrustAddDefaultForUsage
+@ stdcall WintrustAddDefaultForUsage(ptr ptr)
 @ stub WintrustCertificateTrust
 @ stub WintrustGetDefaultForUsage
 @ stdcall WintrustGetRegPolicyFlags(ptr)

Modified: trunk/reactos/dll/win32/wintrust/wintrust_main.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/wintrust/wintrust_main.c?rev=26520&r1=26519&r2=26520&view=diff
==============================================================================
--- trunk/reactos/dll/win32/wintrust/wintrust_main.c (original)
+++ trunk/reactos/dll/win32/wintrust/wintrust_main.c Thu Apr 26 17:38:13 2007
@@ -51,75 +51,6 @@
 }
 
 /***********************************************************************
- *		CryptCATAdminAcquireContext (WINTRUST.@)
- *
- * Get a catalog administrator context handle.
- *
- * PARAMS
- *   catAdmin  [O] Pointer to the context handle.
- *   sysSystem [I] Pointer to a GUID for the needed subsystem.
- *   dwFlags   [I] Reserved.
- *
- * RETURNS
- *   Success: TRUE. catAdmin contains the context handle.
- *   Failure: FAIL.
- *
- */
-BOOL WINAPI CryptCATAdminAcquireContext(HCATADMIN* catAdmin,
-					const GUID *sysSystem, DWORD dwFlags )
-{
-    FIXME("%p %s %lx\n", catAdmin, debugstr_guid(sysSystem), dwFlags);
-    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-    return FALSE;
-}
-
-/***********************************************************************
- *             CryptCATAdminCalcHashFromFileHandle (WINTRUST.@)
- */
-BOOL WINAPI CryptCATAdminCalcHashFromFileHandle(HANDLE hFile, DWORD* pcbHash,
-                                                BYTE* pbHash, DWORD dwFlags )
-{
-    FIXME("%p %p %p %lx\n", hFile, pcbHash, pbHash, dwFlags);
-    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-    return FALSE;
-}
-
-/***********************************************************************
- *             CryptCATAdminEnumCatalogFromHash (WINTRUST.@)
- */
-HCATINFO WINAPI CryptCATAdminEnumCatalogFromHash(HCATADMIN hCatAdmin,
-                                                 BYTE* pbHash,
-                                                 DWORD cbHash,
-                                                 DWORD dwFlags,
-                                                 HCATINFO* phPrevCatInfo )
-{
-    FIXME("%p %p %ld %ld %p\n", hCatAdmin, pbHash, cbHash, dwFlags, phPrevCatInfo);
-    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-    return NULL;
-}
-
-/***********************************************************************
- *		CryptCATAdminReleaseContext (WINTRUST.@)
- *
- * Release a catalog administrator context handle.
- *
- * PARAMS
- *   catAdmin  [I] Pointer to the context handle.
- *   dwFlags   [I] Reserved.
- *
- * RETURNS
- *   Success: TRUE.
- *   Failure: FAIL.
- *
- */
-BOOL WINAPI CryptCATAdminReleaseContext(HCATADMIN hCatAdmin, DWORD dwFlags )
-{
-    FIXME("%p %lx\n", hCatAdmin, dwFlags);
-    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-    return FALSE;
-}
-
-/***********************************************************************
  *		TrustIsCertificateSelfSigned (WINTRUST.@)
  */
 BOOL WINAPI TrustIsCertificateSelfSigned( PCCERT_CONTEXT cert )
@@ -150,7 +81,7 @@
  *   Trust providers can be found at:
  *   HKLM\SOFTWARE\Microsoft\Cryptography\Providers\Trust\
  */
-LONG WINAPI WinVerifyTrust( HWND hwnd, GUID *ActionID,  WINTRUST_DATA* ActionData )
+LONG WINAPI WinVerifyTrust( HWND hwnd, GUID *ActionID, LPVOID ActionData )
 {
     static const GUID gen_verify_v2 = WINTRUST_ACTION_GENERIC_VERIFY_V2;
 
@@ -192,7 +123,7 @@
  CRYPT_PROVIDER_DATA *pProvData, DWORD idxSigner, BOOL fCounterSigner,
  DWORD idxCounterSigner)
 {
-    FIXME("%p %ld %d %ld\n", pProvData, idxSigner, fCounterSigner,
+    FIXME("%p %d %d %d\n", pProvData, idxSigner, fCounterSigner,
      idxCounterSigner);
     return NULL;
 }
@@ -231,6 +162,6 @@
  */
 BOOL WINAPI WintrustSetRegPolicyFlags( DWORD dwPolicyFlags)
 {
-    FIXME("stub: %lx\n", dwPolicyFlags);
+    FIXME("stub: %x\n", dwPolicyFlags);
     return TRUE;
 }

Modified: trunk/reactos/dll/win32/wintrust/wintrust_ros.diff
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/wintrust/wintrust_ros.diff?rev=26520&r1=26519&r2=26520&view=diff
==============================================================================
--- trunk/reactos/dll/win32/wintrust/wintrust_ros.diff (original)
+++ trunk/reactos/dll/win32/wintrust/wintrust_ros.diff Thu Apr 26 17:38:13 2007
@@ -2,9 +2,9 @@
 ===================================================================
 --- wintrust_main.c	(revision 23867)
 +++ wintrust_main.c	(working copy)
-@@ -152,7 +152,26 @@
+@@ -83,7 +83,26 @@
   */
- LONG WINAPI WinVerifyTrust( HWND hwnd, GUID *ActionID,  WINTRUST_DATA* ActionData )
+ LONG WINAPI WinVerifyTrust( HWND hwnd, GUID *ActionID, LPVOID ActionData )
  {
 +    static const GUID gen_verify_v2 = WINTRUST_ACTION_GENERIC_VERIFY_V2;
 +




More information about the Ros-diffs mailing list