>  기사  >  백엔드 개발  >  VS2010 C#을 사용하여 ActiveX 컨트롤 개발(2부), 전체 코드 패키지 다운로드

VS2010 C#을 사용하여 ActiveX 컨트롤 개발(2부), 전체 코드 패키지 다운로드

高洛峰
高洛峰원래의
2017-01-11 10:15:571849검색

실제로 설정하지 않고 코드만 수정하면 프로그램을 실행한 후 오류 인터페이스는 아래 그림 1과 같습니다.

使用VS2010 C#开发ActiveX控件(下),完整代码打包下载

다음과 같이 예외가 발생합니다:

************** 예외 텍스트 **************

System.MethodAccessException: 보안 투명 메서드 ' Rare.Card.Libary.Controls.

ReadCardControl.btnRead_Click(System.Object, System.EventArgs)'을 통해 'Rare.Card.Libary 메서드를 통해 네이티브 코드를 호출하려고 시도했습니다. .MifareOneHelper.rf_read(Int32, Int32, Byte[ ])'가 실패했습니다. 네이티브 코드를 호출하려면 메서드가 보안에 중요하거나

보안에 중요해야 합니다.

MSDN을 참조하면 예외에 대한 설명은 다음과 같습니다.

Microsoft .NET Framework 4에서는 CLR(공용 언어 런타임) 보안 모델이 많은 변경을 거쳤습니다. 변경 사항 중 하나인 Level2 투명성

(Silverlight의 보안 모델과 매우 유사) 채택은 APTCA(AllowPartiallyTrustedCallers) 라이브러리 작성자에게 영향을 미칠 가능성이 높습니다. SecurityTransparent, SecuritySafeCritical 및 SecurityCritical의 세 가지 투명성 속성이 있습니다.

SecurityTransparent: SecurityTransparent로 표시된 코드는 보안 관점에서 신뢰할 수 있습니다. 권한 주장,

검증할 수 없는 코드 실행, 네이티브 코드 호출 등 위험한 작업은 수행할 수 없습니다. 또한 SecurityCritical 코드를 직접 호출할 수도 없습니다.

위에서 언급했듯이 보안상의 이유로 부분적으로 신뢰할 수 있는 모든 코드는 강제로 SecurityTransparent로 설정됩니다. 이는 APTCA 라이브러리의 기본 투명성이기도 합니다.

SecurityCritical: SecurityTransparent와 달리 SecurityCritical 코드는 원하는 작업을 수행할 수 있습니다. 선언,

네이티브 코드 호출 및 기타 작업을 수행할 수 있습니다. 투명도 플래그에 의해 제한되지 않고 다른 메서드를 호출할 수 있습니다.

완전히 신뢰할 수 있는 코드만 SecurityCritical이 될 수 있습니다. 실제로 APTCA가 아닌 완전히 신뢰할 수 있는 코드는 기본적으로 SecurityCritical이므로 투명한 부분적으로 신뢰할 수 있는 호출자의 호출로부터 보호됩니다.

SecuritySafeCritical: SecuritySafeCritical 코드는 투명한 코드가 주요 메소드를 호출할 수 있도록 하는 브리지 역할을 합니다. SecuritySafeCritical

코드는 SecurityCritical 코드와 동일한 권한을 갖지만 SecurityTransparent 코드로 호출할 수 있습니다. 따라서 SecuritySafeCritical 코드가 기본 SecurityCritical 메서드를 안전한 방식으로 노출하는 것이 매우 중요합니다(SecuritySafeCritical 계층을 통해 이러한 메서드를 공격하려는 부분적으로 신뢰할 수 있는 일부 악성 코드를 방지하기 위해).

SecurityCritical 코드와 마찬가지로 SecuritySafeCritical 코드도 완전히 신뢰할 수 있어야 합니다.

MSDN의 설명에 따르면 문제는 원본 Dll을 캡슐화하는 C# 클래스 라이브러리 CardReader.Library에 있으며 코드 수준에서 투명도 속성을 설정하여 문제를 해결할 수 있습니다.

구체적인 해결 방법은 다음과 같습니다.

1. ActiveX 제어 카드 읽기 코드의 투명 속성을 SecuritySafeCritical로 설정합니다. 설정 후 코드 목록은 다음과 같습니다.


참조를 추가하세요: using System.Security;
[SecuritySafeCritical] 
/// <summary> 
/// 读卡 
/// </summary> 
/// <param name="sender"></param> 
/// <param name="e"></param> 
private void btnRead_Click(object sender, EventArgs e) 
{ 
int i = 0; 
byte[] data = new byte[16]; 
byte[] buff = new byte[32]; 

for (i = 0; i < 16; i++) 
data[i] = 0; 
for (i = 0; i < 32; i++) 
buff[i] = 0; 

st = MifareOneHelper.rf_read(icdev, sec * 4 + 1, data); 
if (st == 0) 
{ 
SerialInterfaceHelper.hex_a(data, buff, 16); 
txtCardID.Text = System.Text.Encoding.ASCII.GetString(buff); 
lblMsg.Text = "读取卡号成功!"; 
} 
else 
lblMsg.Text = "读取卡号失败!"; 

//test method 
//if (string.IsNullOrEmpty(txtCardID.Text)) 
//{ 
// lblMsg.Text = "读取数据失败!"; 
//} 
//else 
//{ 
// lblMsg.Text = string.Format("读取数据:{0}!", txtCardID.Text); 
//} 
}
여기서 테스트 코드가 주석 처리되어 있으며 직렬 통신 및 카드 판독 코드가 사용됩니다.

2. 원본 카드 리더기 DLL을 캡슐화하는 투명 속성을 설정합니다.
M1 카드 리더 도우미 클래스 MifareOneHelper의 transparent 속성을 [SecurityCritical]로 설정하고, 호출된 MifareOneHelper.rf_read 메서드의
transparent 속성을 [SecurityCritical]로 설정합니다.
직렬 통신 도우미 클래스 SerialInterfaceHelper의 투명 속성을 [SecurityCritical]로 설정하고 호출된 SerialInterfaceHelper.hex_a 메서드의
투명 속성을 [SecurityCritical]로 설정합니다.

완전한 코드가 제공되었습니다. 클라이언트가 ActiveX를 설치하지 못한 경우에는 ActiveX를 실행하는 주소가 신뢰할 수 있는 사이트에 추가됩니다. 사이트가 최소화되거나 ActiveX 관련 사이트 신뢰 옵션을 설정하도록 축소됩니다.

VS2010 C#을 사용하여 ActiveX 컨트롤을 개발하는 방법(2부), 전체 코드 패키지 다운로드에 대한 자세한 내용은 PHP 중국어 웹사이트에서 관련 기사를 확인하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.