글쓴 사람
        정성태 (techsharer at outlook.com)
        홈페이지
        
        첨부 파일
        
        
        
            
            
            
                
                    (연관된 글이 2개 있습니다.)
                    
                    
                    
Internet_Zone 하위에 새로운 코드 그룹을 추가하는 예제
특히나 스마트 클라이언트 프로그램을 해보신 분들이 한번쯤 도전해 보셨을 것 같은데요. 아래의 그림을 보시면 기본적으로 "Internet_Zone" 이 있고, 그 하위에 여러분들의 스마트 클라이언트 DLL/EXE 가 존재하는 코드 그룹을 생성하려고 해보셨을 것입니다.

대개의 경우, 다음과 같은 식으로 코딩을 하지요.
01:     IMembershipCondition memberShipCondition = new UrlMembershipCondition("http://127.0.0.1/webapp/*");
02: 
03:     UnionCodeGroup smartClientGroup = new UnionCodeGroup( new AllMembershipCondition(), null );
04:     smartClientGroup.MembershipCondition = memberShipCondition;
05:     smartClientGroup.Name = "InternetSmartClient_Zone";
06:     smartClientGroup.Description = "InternetSmartClient_Zone Codegroup";
07: 
08:     PolicyStatement policyStatement = new PolicyStatement(permSet, PolicyStatementAttribute.Nothing);
09:     smartClientGroup.PolicyStatement = policyStatement;
10: 
11:     object internetZone = null;
12:     foreach (CodeGroup cg in machinePolicyLevel.RootCodeGroup.Children)
13:     {
14:         if (cg.Name == "Internet_Zone")
15:         {
16:             internetZone = cg;
17:             break;
18:         }
19:     }
20: 
21:     if (internetZone != null)
22:     {
23:         ((CodeGroup)internetZone).AddChild(smartClientGroup);
24:		    SecurityManager.SavePolicy();
25:     }
물론, 위와 같이 코딩을 하시면 100% 장담하건데... 변경 사항이 저장되지 않습니다. 저도 예전에 이 단계에서 그냥 포기하고 Internet_Zone 과 동일한 레벨에서 새로운 코드 그룹을 생성하는 것으로 마무리를 지었었는데요.
추석 연휴이다 보니 ^^ 여유도 있고 해서 한번 이 문제를 도전해봤습니다. 일단 위의 방법외에 뭔가 추가적인 방법이 있을 것 같은데, Google 신 조차도 저에게 아무런 메시지를 내려주지 않아서 애가 타더군요. 그러다가 문득, caspol.exe 에서는 정상적으로 동작하던 기억이 나서,... 통째로 역어셈블을 한 다음에 분석하기 시작했습니다. 
결론은, ... SavePolicy 하기 전에 코드 그룹을 재구성해야 한다는 것을 찾아냈고 그 부분의 소스 코드만을 분리해 내어 간단한 예제로 제작해 보았습니다. 그것이 바로 첨부한 "AddCodeGroup.zip" 파일입니다. 아울러, "caspol.zip" 파일을 같이 첨부를 했는데요. 그것은 .NET 2.0 에 포함된 caspol.exe 를 .NET Reflector 로 역어셈블하여 VS.NET 2005 로 컴파일/디버그 가능한 프로젝트로 실어 놓은 것입니다. [2006.10.09 내용 추가 : caspol 소스는 SSCLI20 에도 포함되어져 있습니다. 경로: /clr/src/toolbox/caspol
따라서, 위의 소스는 다음과 같이 바뀌게 됩니다.
21: if (internetZone != null)
22: {
23:     ((CodeGroup)internetZone).AddChild(smartClientGroup);
24:     ReplaceLabel("Internet_Zone", (CodeGroup)internetZone);
25:     SecurityManager.SavePolicy();
26: }
  // 이하 ReplaceLabel 의 소스는 첨부된 AddCodeGroup.zip 에 실려 있습니다.
첨부된 AddCodeGroup.zip 프로젝트로 컴파일된 소스를 실행하고 나면 다음과 같은 보안 설정이 이뤄지게 됩니다. 새로운 코드 그룹이 Internet_Zone 하위에 추가되고, 해당 코드 그룹이 사용하는 전용 보안 집합이 생성된 것을 볼 수 있습니다.

[이 토픽에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]
        
        [연관 글]
                    
                    
                    
                    
                    
    
                    
                    
                    
                    
                    
                
             
        
        
        
        
        
        
        
            
        
        
        
        
        
        
        ... 76  77  78  79  80  81  82  83  84  85  [86]  87  88  89  90  ...
| Title | 
| 11901 | 정성태 | 5/21/2019 | 27035 | 오류 유형: 538. msbuild 오류 - Could not find a part of the path '%LOCALAPPDATA%\Temp\2\.NETFramework,Version=v4.0.AssemblyAttributes.cs' |  | 
| 11900 | 정성태 | 5/18/2019 | 25725 | 오류 유형: 537. "sfc /scannow" 실행 중 시스템이 부팅되는 현상 |  | 
| 11899 | 정성태 | 5/17/2019 | 25693 | Linux: 9. Linux에서 윈도우의 OutputDebugString 대신 사용할 수 있는 syslog [1] |  | 
| 11898 | 정성태 | 5/16/2019 | 27128 | VC++: 130. C++ string의 c_str과 data 함수의 차이점 [3] |  | 
| 11897 | 정성태 | 5/16/2019 | 32708 | 오류 유형: 536. Visual Studio - "Developer Pack"을 설치했는데도 "대상 프레임워크" 목록에 나오지 않는 경우 [2] |  | 
| 11896 | 정성태 | 5/15/2019 | 30494 | 개발 환경 구성: 440. C#, C++ - double의 Infinity, NaN 표현 방식 |  1 | 
| 11895 | 정성태 | 5/12/2019 | 26953 | .NET Framework: 832. ML.NET Model Builder - 회귀(Regression), 다중 분류(Multi-class classification) 예제 |  1 | 
| 11894 | 정성태 | 5/10/2019 | 29132 | VS.NET IDE: 135. Visual Studio - ML.NET Model Builder 소개 [5] |  | 
| 11893 | 정성태 | 5/10/2019 | 24575 | 오류 유형: 535. C# 6.0 이상의 문법을 컴파일 시 오류가 발생한다면? |  | 
| 11892 | 정성태 | 5/10/2019 | 23742 | 웹: 38. HTTP Cookie의 expires 시간 형식(RFC7231) |  | 
| 11891 | 정성태 | 5/9/2019 | 27847 | .NET Framework: 831. (번역글) .NET Internals Cookbook Part 12 - Memory structure, attributes, handles |  | 
| 11890 | 정성태 | 5/8/2019 | 24418 | 개발 환경 구성: 439. "Visual Studio Enterprise is required to execute the test." 메시지와 관련된 코드 기록 |  | 
| 11889 | 정성태 | 5/8/2019 | 23099 | 개발 환경 구성: 438. mstest, QTAgent의 로그 파일 설정 방법 |  | 
| 11888 | 정성태 | 5/8/2019 | 42462 | .NET Framework: 830. C# - 비동기 호출을 취소하는 CancellationToken의 간단한 예제 코드 [1] |  1 | 
| 11887 | 정성태 | 5/8/2019 | 28002 | .NET Framework: 829. C# - yield 문을 사용할 수 있는 메서드의 조건 |  | 
| 11886 | 정성태 | 5/7/2019 | 24688 | 오류 유형: 534. mstest.exe 실행 시 "Visual Studio Enterprise is required to execute the test." 오류 [2] |  | 
| 11885 | 정성태 | 5/7/2019 | 22675 | 오류 유형: 533. mstest.exe 실행 시 "File extension specified '.loadtest' is not a valid test extension." 오류 발생 |  | 
| 11884 | 정성태 | 5/5/2019 | 27137 | .NET Framework: 828. C# DLL에서 Win32 C/C++처럼 dllexport 함수를 제공하는 방법 - 두 번째 이야기 |  | 
| 11883 | 정성태 | 5/3/2019 | 32843 | .NET Framework: 827. C# - 인터넷 시간 서버로부터 받은 시간을 윈도우에 적용하는 방법 |  1 | 
| 11882 | 정성태 | 5/2/2019 | 29209 | .NET Framework: 826. (번역글) .NET Internals Cookbook Part 11 - Various C# riddles |  1 | 
| 11881 | 정성태 | 4/28/2019 | 29474 | 오류 유형: 532. .NET Core 프로젝트로 마이그레이션 시 "CS0579 Duplicate 'System.Reflection.AssemblyCompanyAttribute' attribute" 오류 발생 |  | 
| 11880 | 정성태 | 4/25/2019 | 25610 | 오류 유형: 531. 이벤트 로그 오류 - Task Scheduling Error: m->NextScheduledSPRetry 1547, m->NextScheduledEvent 1547 |  | 
| 11879 | 정성태 | 4/24/2019 | 35231 | .NET Framework: 825. (번역글) .NET Internals Cookbook Part 10 - Threads, Tasks, asynchronous code and others |  2 | 
| 11878 | 정성태 | 4/22/2019 | 29217 | .NET Framework: 824. (번역글) .NET Internals Cookbook Part 9 - Finalizers, queues, card tables and other GC stuff |  1 | 
| 11877 | 정성태 | 4/22/2019 | 30031 | .NET Framework: 823. (번역글) .NET Internals Cookbook Part 8 - C# gotchas |  1 | 
| 11876 | 정성태 | 4/21/2019 | 26107 | .NET Framework: 822. (번역글) .NET Internals Cookbook Part 7 - Word tearing, locking and others |  1 | 
... 76  77  78  79  80  81  82  83  84  85  [86]  87  88  89  90  ...