2008-09-25 5 views
7

내 웹 사이트에서 내 Windows 2003 시스템으로 프로그램을 다운로드하면 차단 된 블록이 생겨서 EXE를 마우스 오른쪽 버튼으로 클릭 한 다음 속성, 그런 다음 "차단 해제"버튼을 선택하십시오.Windows 2003의 파일 속성에서 차단 된 exe "차단 해제"옵션 재현

파일이 차단되어 충분한 권한이없는 경우 설치 프로그램에 탐지 기능을 추가하고 싶습니다.

하지만 차단 해제해야하는 상태에서 내 exe를 얻는 방법을 eaisly로 재현 할 수 없습니다.

이 기능을 테스트 할 수 있도록 차단 해제를 내 EXE에 표시하려면 어떻게해야합니까?

답변

19

NTFS 파일 스트림을 사용하여 수행됩니다. 다운로드 된 파일에 "Zone.Identifier"라는 스트림이 추가되었습니다. IE7은 파일의 특정 유형을 다운로드 할 때 그 스트림이 포함

[ZoneTransfer] 
ZoneId=3 

을 설정하는 가장 간단한 방법은 그것에서 그 내용으로 텍스트 파일을 생성하고, 대체 스트림에 추가 할 이상을 사용하는 것입니다.

Zone.Identifier.txt :

[ZoneTransfer] 
ZoneId=3 

명령 :

more Zone.Identifier.txt > file.exe:Zone.Identifier 

그런 다음, 당신이 그것을 확인하기위한 방법은 Zone.Identifier 스트림을 열려고하고 ZoneId을 찾아하는 것 = 3이거나 사용자가 해당 경고를 수신하는 스트림이 모두있는 경우 간단히 가정합니다.

권한과는 아무런 관련이 없습니다. 관리자는 동일한 경고를 보게됩니다. 그것은 소스와 파일 형식으로 전적으로해야합니다. 사용자가 "이 파일을 열기 전에 항상 확인"상자를 선택하고 실행을 클릭하면 전체 스트림이 사라집니다.

+0

큰 도움을 주셔서 감사합니다. –

+0

이것은 내가 찾고있는 정보이다. –

11

MSDN에 문서화 된 지원되는 API가 있습니다. MSDN에서 "영구 영역 식별자 개체"를 검색하십시오. 기본적으로 CoCreateInstanceCLSID_PersistentZoneIdentifier을 입력하고 IPersistFile 인터페이스를 요청하십시오. 그런 다음 해당 파일의 이름을 사용하여 IPersistFile::Load으로 전화하십시오. 다음으로 IZoneIdentifier 인터페이스의 경우 QI를 입력하고 IZoneIdentifier::GetId을 사용하여 파일 영역을 가져옵니다. "웹의 흔적"이 없다면 URLZONE_LOCAL_MACHINE을 얻어야합니다. 다른 응답에서 언급 된 ZoneId는 URLZONE_INTERNET입니다. 이 열거 형은 URLZONE이며 MSDN에 문서화되어 있거나 sdk\inc\urlmon.h을 참조하십시오. IZoneIdentifier::Remove 또는 IZoneIdentifier::SetId을 호출하여 "웹 마크"를 제거하거나 변경 한 다음 IPersistFile::Save으로 전화 할 수 있습니다. 이 모든 것에 대한 자세한 내용은 MSDN을 참조하십시오. 행운을 빕니다!

1

감사합니다. 덕분에 많은 도움이되었습니다.

내용이 포함 된 배치 파일을 만들면 프로세스를 더욱 쉽게 만들 수 있습니다.

echo [ZoneTransfer] > Zone.Identifier 
echo ZoneId=3 >> Zone.Identifier 
more Zone.Identifier > %1:Zone.Identifier 

이렇게하면 Zone.Identifier가 생성되어 이에 맞게 파일을 표시합니다.

실행하려면 파일 이름 만 입력하면됩니다. 파일 이름이 mark.bat 인 경우

mark.bat myfile.txt