⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 register.c

📁 这是一个开放源代码的与WINNT/WIN2K/WIN2003兼容的操作系统
💻 C
📖 第 1 页 / 共 4 页
字号:
                                         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;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -