2011-08-01 2 views
4

나는 장치 (금전 함)가있어서 장치와 직접 통신하고 싶습니다. 나는 그것의 주소 f1에 있음을 안다. 또한 openbit는 01입니다.I/O 주소에 데이터 쓰기

나는 지금까지 이해 했으므로 메모리 주소 f1에 1을 보내야하고 금전 함이 열립니다. asm을 사용하더라도 액세스 위반이 발생합니다. 그럼 다시는 내가 그 창문을 당신이 직접 장치/O를 주소 (승리를 사용해야합니다) 의사 소통을 못하게 읽었습니다. 해당 주소로 데이터를 보내는 올바른 방법은 무엇입니까? 내 응용 프로그램 내에서 드라이버와 통신 할 수 없기 때문에 드라이버를 사용할 수 없습니다. 작곡가 시스템 win7입니다.

미리 감사드립니다.

+1

내가 아는 한 사용자 공간 앱이 기기와 통신하는 유일한 방법은 드라이버를 사용하는 것입니다. –

+0

실제로 "메모리 주소 F1"에있는 것이 아니라 I/O 포트 F1에 있다고 생각합니다. 차이점은 IN 및 OUT 명령은 MOV 등이 아닌 I/O 포트 액세스에 사용된다는 것입니다. 드라이버 및 지원되는 Delphi 예제는 다음에서 사용할 수 있습니다. (http://www.grahamwideman.com/gw/tech/Delphi/iopm/ index.htm) – Brian

답변

0

왜 응용 프로그램에서 드라이버와 통신 할 수 없습니까? 링 3 애플리케이션이 하드웨어와 안전하게 대화하는 가장 좋은 방법입니다.

그러나 실제로 드라이버 사용을 주장하는 경우 0으로 전화를 걸고 직접 액세스를 시도 할 수 있습니다. 이전 Windows 버전 (XP 이전)보다 훨씬 어렵지만 가능합니다. Windows 7이 없기 때문에 직접 해보지는 않았지만 어디에서나 ASM 프로그래밍 포럼에 질문 할 수 있습니다.

+1

죄송 합니다만, 사용자 모드에서 링 0을 입력 할 수 있다고 생각하지 않습니다. 커널 만이 할 수 있습니다. –

+0

당신이 asm에서 충분하다면, 가능합니다. 내 친구는 그 일에 정말 능숙하며 그 일을 할 수 있습니다. 적어도 그는 Windows XP에서 나를 보여줍니다. – LeleDumbo

1

경우 위의 훌륭한 제안은 this delphi code for writing and reading I/O을 확인하십시오. 우리는 GWIOPM을 사용하여 요청한 것을 수행했지만 W7 등의 Windows 32 비트 버전에서는 (대부분의 '무료'드라이버의 경우와 마찬가지로) 괜찮을 것입니다. 64 비트 Windows의 경우 서명 된 커널 드라이버가 필요합니다. 이를 위해 현재 사용할 수있는 것들이 거의 없습니다. 우리는 우리 자신을 써야했습니다.