[C++]IEプロキシサーバーのアカウントパスワードを取得する
多くのプログラムでは「ブラウザ設定」のプロキシサーバを使用する必要があり、IE設定のプロキシサーバではアカウントパスワードが必要になる可能性があります.ブラウザが設定したプロキシサーバーのアカウントパスワードをどのようにプログラミングして取得しますか?
では、IE内のプロキシサーバーのアカウントパスワードを取得するにはどうすればいいのでしょうか.肝心なのはコントロールパネル->ユーザー->資格証明マネージャで、IEのプロキシサーバーのアカウントパスワードはすべてここで管理します.
Windows自身がIEエージェントサーバのアカウントパスワードを管理できるインタフェースを持っている以上、システムには必ず対応するAPIがこの機能を実現することができる.
上記コードは、特定のIPのプロキシサーバのアカウントパスワードを取得することができる.つまり、IEブラウザが設定したプロキシサーバーのアカウントパスワードを取得します.
InternetQueryOption(NULL, INTERNET_OPTION_PASSWORD, buf, &len)
この方法は私たちの目標を達成できないことが証明された.INTERNET_OPTION_PASWORDは、特定の接続のパスワードを取得するためにのみ使用できます.つまり、接続にパスワードを設定した後、接続のハンドルに基づいてこの接続のパスワードを取得することができます.これは私たちが望んでいる機能ではありません.では、IE内のプロキシサーバーのアカウントパスワードを取得するにはどうすればいいのでしょうか.肝心なのはコントロールパネル->ユーザー->資格証明マネージャで、IEのプロキシサーバーのアカウントパスワードはすべてここで管理します.
Windows自身がIEエージェントサーバのアカウントパスワードを管理できるインタフェースを持っている以上、システムには必ず対応するAPIがこの機能を実現することができる.
BOOL cred(TCHAR* ip, CString& usr, CString& pwd)
{
usr.Empty();
DWORD dwCount = 0;
PCREDENTIAL * pCredArray = NULL ;
if( CredEnumerate( NULL, 0, &dwCount, &pCredArray ) )
{
for( DWORD dwIndex = 0; dwIndex < dwCount; dwIndex++)
{
PCREDENTIAL pCredential = pCredArray[dwIndex];
CString target = pCredential->TargetName;
if (target == ip)
{
usr = pCredential->UserName;
#ifdef _UNICODE
pwd = (LPCWSTR)pCredential->CredentialBlob;
#else
pwd = CW2A((LPCWSTR)pCredential->CredentialBlob);
#endif
break;
}
}
CredFree( pCredArray );
}
return (usr.GetLength() > 0);
}
上記コードは、特定のIPのプロキシサーバのアカウントパスワードを取得することができる.つまり、IEブラウザが設定したプロキシサーバーのアカウントパスワードを取得します.