我可以创建一个与提交按钮一样工作的

我可以创建一个与提交按钮一样工作的

本文介绍了我可以创建一个与提交按钮一样工作的 CommandLink 吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

请理解我缺乏写作技巧.

Please understand my lack of writing skills.

我正在测试以制作自定义凭据提供程序.我想创建一个 CommandLink 与提交按钮做同样的事情.我想通过 CommandLink 与提交按钮分开登录.目前,只有自定义凭据提供程序通过 providerFilter::Filter(CREDENTIAL_PROVIDER_USAGE_SCENARIO cpu, DWORD dwFlags, GUID* rgclsidProviders, BOOL* rgbAllow, DWORD cProviders) 公开.点击【anathor longon button】登录.

I am testing to make a custom credential provider.I want to create a CommandLink that does the same thing with the submit button.I want to log on through the CommandLink separately from the Submit button.Currently, only the custom credential provider is exposed through the providerFilter::Filter(CREDENTIAL_PROVIDER_USAGE_SCENARIO cpus, DWORD dwFlags, GUID* rgclsidProviders, BOOL* rgbAllow, DWORD cProviders).Click [anathor longon button] to log on.

这是我的示例代码:

 HRESULT CSampleCredential::CommandLinkClicked(DWORD dwFieldID)
 {
     HRESULT hr = S_OK;
     DWORD dwResult = 0;

     if (dwFieldID < ARRAYSIZE(_rgCredProvFieldDescriptors) &&
         (CPFT_COMMAND_LINK == _rgCredProvFieldDescriptors[dwFieldID].cpft))
     {
         HWND hwndOwner = nullptr;
         switch (dwFieldID)
         {
         case SFI_ANATHOR_SUBMIT_LINK:
             dwResult = function_foo();
             if(dwResult == 1) {
                  Call GetSerialization()...?
                  Run the logon.
             }
             break;
             // ...
         }
     }
 }

推荐答案

因为您正在编写凭证提供程序,所以您已经在实现 ICredentialProvider 接口及其 Advise 方法:

Because you are writing credential provider, than you are already implementing ICredentialProvider interface and its Advise method:

    virtual HRESULT STDMETHODCALLTYPE Advise(
        /* [annotation][in] */
        _In_  ICredentialProviderEvents *pcpe,
        /* [annotation][in] */
        _In_  UINT_PTR upAdviseContext) = 0;

第一个参数是指向事件接口 ICredentialProviderEvents 的指针,它只有一个方法:CredentialsChanged.您的任务是从用户(登录名/密码)那里获取凭据,将它们存储在您的内部并调用此方法.在下一个回合,您的提供者将被称为此方法:

The first argument is pointer to events interface ICredentialProviderEvents which have only one method: CredentialsChanged.Your task is to grab credentials from user (login/password) store them inside your internals and call this method.On the next turn your provider will be called this method:

    virtual HRESULT STDMETHODCALLTYPE GetCredentialCount(
        /* [annotation][out] */
        _Out_  DWORD *pdwCount,
        /* [annotation][out] */
        _Out_  DWORD *pdwDefault,
        /* [annotation][out] */
        _Out_  BOOL *pbAutoLogonWithDefault) = 0;

您的任务是在 pdwDefaultpbAutoLogonWithDefault 参数中返回正确的值(我的建议是 0TRUE).比实现 ICredentialProviderCredential 接口的类将立即为 GetSerialization 方法调用.

Your task is to return the correct values in pdwDefault and pbAutoLogonWithDefault parameters (my suggest is 0 and TRUE).Than your class that implementing ICredentialProviderCredential interface will be immediately called for GetSerialization method.

您可以在此处返回已存储的凭据.

Here you can return already stored credentials.

这篇关于我可以创建一个与提交按钮一样工作的 CommandLink 吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-30 18:07