자격 증명 관리자에 계정을 등록해서 NTLM 이 필요한 사이트를 자동 로그인  시킬 수 있습니다.

 

단, 브라우저에서 해당영역의 사용자 인증이 "인트라넷 영역에서만 자동으로 로그온" 또는 "현재 사용자 이름 및 암호를 사용하여 자동으로 로그온" 으로 설정되어 있어야 합니다.

 

 

 

 

CredRead 함수는 자격증명 관리자에 해당 호스트가 있는지 확인합니다.

CredDelete 함수는 자격 증명 관리자에서 해당 호스트를 삭제합니다.

CredWrite 함수는 자격증명 관리자에 호스트를 등록합니다.

 

 

헤더 파일을 추가합니다.

#include <WinCred.h>

 

1) 계정 읽기 ( CredRead )

BOOL CUtility::ReadCredential()

{         

           BOOL bOk;

           WCHAR szServer[MAX_URL] = {0};

           WCHAR szDomain[MAX_NAME] = {0};

           WCHAR szId[MAX_NAME] = {0};

           WCHAR lpszPassword[MAX_NAME] = {0};

 

           LoadAccount(szServer,szDomain, szId, lpszPassword);

 

           WCHAR HostName[1000] = {0};  

           wcscpy(szHost, L"xxx.sharepoint.com");

           PCREDENTIAL pcred;      

          bOk = ::CredRead(szHost,  CRED_TYPE_DOMAIN_PASSWORD, 0,  &pcred);     

           if( bOk)  // 계정이 존재하면 TRUE을 리턴한다.

           {

                 ::CredFree(pcred);

           }           

           return bOk;

}

 

 

 

2) 계정 추가  (CredWrite)

BOOL CTipUtility::AddCredential2(CString& error)
    

 BOOL bOk;

 WCHAR szHost[MAX_URL] = {0};
 WCHAR szDomain[MAX_NAME] = {0};
 WCHAR szId[MAX_NAME] = {0};
 WCHAR lpszPassword[MAX_NAME] = {0};

 LoadAccount(szServer,szDomain, szId, lpszPassword);

 

 TCHAR   pzAccout[MAX_PATH] = {0};   

 

 CString account;
 account.AppendFormat(L"%s\\%s", szDomain, szId);  
 wcscpy(pzAccout, account);

 wcscpy(szHost, L"xxx.sharepoint.com");

 

 CREDENTIAL cred = {0};
 cred.Type = CRED_TYPE_DOMAIN_PASSWORD;
 cred.TargetName = HostName;
 cred.CredentialBlobSize = (DWORD)wcslen(lpszPassword) * sizeof(WCHAR);
 cred.CredentialBlob = (LPBYTE)lpszPassword;
 cred.Persist = CRED_PERSIST_ENTERPRISE;
 cred.UserName = pzAccout;
 bOk = ::CredWrite(&cred, 0);

 if(!bOk)  
 {
      DWORD result = ::GetLastError(); 
      WCHAR buf[256];
      FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, result,

    MAKELANGID  (LANG_NEUTRAL, SUBLANG_DEFAULT), buf, 256, NULL);

error = buf;


 return bOk;

}

 

 

3) 계정 삭제 (CredDelete)

BOOL CTipUtility::DeleteCredential2(CString& error)
{
       BOOL bOk;

 WCHAR szServer[MAX_URL] = {0};
 WCHAR szDomain[MAX_NAME] = {0};
 WCHAR szId[MAX_NAME] = {0};
 WCHAR lpszPassword[MAX_NAME] = {0};

 LoadAccount(szServer,szDomain, szId, lpszPassword);

 

 TCHAR   HostName[1000] = {0};

 wcscpy(szHost, L"xxx.sharepoint.com");

 

 bOk = CredDelete(szHost, CRED_TYPE_DOMAIN_PASSWORD, 0);

 if(!bOk)  
 {


  DWORD result = ::GetLastError();
  WCHAR buf[256];
  FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, result, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), buf, 256, NULL);
  error = buf;


 }

 return bOk;


}