2010-03-11 5 views
0

PC의 장치 별 실제 메모리를 통해 메모리 매핑 장치에 액세스하고 있습니다. 이것은 특정 물리적 주소를 프로세스 주소 공간의 선형 메모리에있는 포인터로 매핑하는 드라이버를 사용하여 수행됩니다.Windows에서 실제 주소 액세스 차단

특정 물리적 주소를 차단하고 다른 프로세스 나 장치가이 실제 주소에 액세스하지 못하도록하는 방법이 있는지 알고 싶었습니까?

실제 주소를 선형 주소로 매핑하는 것은 타사 드라이버 인 TVicHW32을 사용하여 수행됩니다.

편집 : 다른 플래그로 내 응용 프로그램의 2 인스턴스를 실행하면 시나리오를 재현 할 수 있습니다. 두 인스턴스 모두 프로세스의 메모리 공간의 일부가 아닌 동일한 특정 물리적 메모리에 액세스 할 수 있습니다.

답변

2

Youd 드라이버는 범위가 이미 매핑되어 있는지 확인하고 사용 가능한 경우 매핑하고 예약을 기록하는 서비스 (DeviceIoContro)를 노출하여 작업을 수행해야합니다. 또한 서비스 thar는 예약 영역을 해제하고 매핑을 해제합니다. 물론 닫을 때 특정 핸들과 관련된 모든 영역을 해제해야합니다. 안타깝게도 "매핑"서비스가 DeviceIoControl을 통해 이루어지기 때문에 매핑/매핑 해제 서비스에 약간의 비대칭 성이 있습니다. 따라서 CreateFile 시간에 얻은 핸들을 가져 왔지만 매핑 된 영역은 더 이상 장치 핸들에 직접 연결되지 않습니다. 물론 매핑 해제를 자동화하기 위해 드라이버의 "close"메소드를 조정할 수 있습니다 (ZwUnmapViewOfSection ...).

+0

내 문제는 내가 누가 물리적 주소에 액세스하는지 제어하지 않는다는 것입니다. 나는 프로세스 만 제어하지만 다른 프로세스 나 장치 드라이버는 동일한 물리적 주소에 액세스합니다. – Eldad

+0

오, 죄송합니다. 나는 당신이 드라이버를 수정할 수 없다는 점을 인정하지 않았습니다. 그래서 일은 훨씬 더 어렵습니다. (작은) 희망은 다른 사용자의 프로세스가 드라이버에 의해 노출 된 public 객체에 대한 액세스 (즉, CreateFile에서 디바이스에 펜을 사용하는 이름)에 대한 액세스를 제한함으로써 드라이버가 제어하는 ​​디바이스에 액세스하는 것을 방지하는 것입니다. –

+0

하지만 이것은 매우 제한된 해결책이며 전혀 그렇지 않습니다. 어쨌든 다른 장치 드라이버가 장치의 상태를 잘못 변경하는 것을 막을 수는 없습니다. 잘못된 커널 드라이버는 어떤 종류의 나쁜 일도 할 수 있습니다. ( 몇 년 전에 ISA 카드를 개발하는 동안 비슷한 문제가 발생했습니다. 내 장치에 쓰기. 나는 칩 선택 신호를 CPU의 NMI 라인에 연결해야했기 때문에 카드의 메모리가 액세스되었을 때 저레벨 디버거로 NMI 이벤트를 가로 챌 수 있었다. –

관련 문제