프로그래밍/델파이

IE 보안탭의 신뢰할 수 있는 사이트에 등록하기

채윤아빠 2007. 12. 21. 23:55
728x90
반응형

IE 보안탭의 신뢰할 수 있는 사이트에 등록하는 함수를 만들어 보았습니다.
함수의 매개변수로 신뢰할 수 있느 사이트에 추가할 호스트 URL을 입력하면 됩니다.

function SetReliableSite(const strSite:string):boolean;
const
  CLSID_InternetSecurityManager:   TGUID = '{7b8a2d94-0ac9-11d1-896c-00c04fB6bfc4}';
  CLSID_InternetZoneManager    :   TGUID = '{7B8A2D95-0AC9-11d1-896c-00C04FB6BFC4}';
var
  AResult:HRESULT;
  AInternetZoneManager:IInternetZoneManager;
  AInternetSecurityManager:IInternetSecurityManager;
  dwEnum,dwCount,dwZone:DWORD;
  AZoneAttributes:ZONEATTRIBUTES;
begin
  Result:=false;

  if (Trim(strSite)='') then
    Exit;

  // 객체 생성
  AResult:=CoCreateInstance(CLSID_IInternetZoneManager,
                          nil,
                          CLSCTX_ALL,
                          IID_IInternetZoneManager,
                          AInternetZoneManager);
  if (Failed(AResult)) then
    Exit;

  AResult:=CoCreateInstance(CLSID_IInternetSecurityManager,
                          nil,
                          CLSCTX_ALL,
                          IID_IInternetSecurityManager,
                          AInternetSecurityManager);
  if (Failed(AResult)) then
    Exit;

  // Creates a zone enumerator
  AInternetZoneManager.CreateZoneEnumerator(dwEnum,dwCount,0);

  // Retrieves the zone associated with the specified index on the given enumerator
  AInternetZoneManager.GetZoneAt(dwEnum,URLZONE_TRUSTED,dwZone);

  // 신뢰할 수 있는 사이트는 기본적으로 https를 요구하기 때문에 이 속성을 제거
  AInternetZoneManager.GetZoneAttributes(dwZone,AZoneAttributes);
  if ( (AZoneAttributes.dwFlags and ZAFLAGS_REQUIRE_VERIFICATION)>0 ) then
      AZoneAttributes.dwFlags:=AZoneAttributes.dwFlags and not ZAFLAGS_REQUIRE_VERIFICATION;
  AInternetZoneManager.SetZoneAttributes(dwZone,AZoneAttributes);

  // 해당 도메인 등록
  AResult:=AInternetSecurityManager.SetZoneMapping(dwZone,PWideChar(strSite),SZM_CREATE);
  if (Failed(AResult)) then
  begin
    if (dwEnum<>0) then
      AInternetZoneManager.DestroyZoneEnumerator(dwEnum);
    Exit;
  end;
  if (dwEnum<>0) then
    AInternetZoneManager.DestroyZoneEnumerator(dwEnum);

  Result:=true;
end;