2012-05-15 2 views
0

WDK에서 PHYSICAL_ADDRESS 구조를 이해하는 데 문제가 있습니다. 나는 그것이 실제 기억의 실제 물리적 주소라고 생각했다. 지금 나는 이것을 시도했다 - 나는 512 MB RAM을 가진 가상 PC를 가지고 있고 나의 운전사에 코드를 붙인다.실제로 WDK 드라이버의 PHYSICAL_ADDRESS 값을 의미합니까?

PHYSICAL_ADDRESS pa; 
pa.QuadPart = 9223372036854775805; //max LONGLONG - 1 
mr = MmMapIoSpace(pa , 100, 0); 
DbgPrint("%i ", MmGetPhysicalAddress(mr)); 

... 그리고 그것은 문제없이 일했다. 512MB RAM으로 어떻게 가능합니까? 최대 실제 주소는 512MB = cca 512 000 000입니까? 실제로 PHYSICAL_ADDRESS 값을 의미하는 것은 무엇입니까?

추신 : 왜 내가이 일을하고 있는지 묻지 마십시오. 나는 이것이 어떻게 가능한지 궁금하다.

답변

0

문제없이 작동하는 코드는 해당 (가능하지 않은) 실제 주소를 코드에서 읽고 쓸 수있는 가상 주소에 성공적으로 매핑한다는 것을 의미합니다. 이것은 페이지 테이블의 항목입니다. 분명히 시스템은 물리적 주소 범위를 확인하지 않습니다. 얻은 가상 주소를 derefencing 해보십시오. DbgPrint ("% x \ n", * ((PULONG) mr));