: 커널 모드에서 실행커널 모드의 드라이버가 사용자 공간에서 직접 주소를 읽거나 쓸 때 매우주의해야하는 이유는 무엇입니까? MSDN에서
드라이버는 직접 에서 읽거나 사용자 공간에서 주소를 작성하는 방법에 대한 매우주의해야합니다. 이 시나리오 은 그 이유를 설명합니다.
- 사용자 모드 프로그램은 장치에서 일부 데이터를 읽는 요청을 시작합니다. 프로그램은 데이터를 수신하는 에 버퍼의 시작 주소를 제공합니다.
- 커널 모드에서 실행중인 장치 드라이버 루틴은 읽기 작업을 시작하고 해당 호출자에게 제어를 반환합니다.
- 나중에 장치는 읽기 작업이 완료되었다고 말하기 위해 현재 실행중인 스레드를 인터럽트합니다. 이 임의의 스레드에서 실행중인 커널 모드 드라이버 루틴은 이 임의의 프로세스에 속하므로 인터럽트를 처리합니다.
- 이 시점에서 드라이버는 1 단계에서 제공 한 사용자 모드 프로그램의 시작 주소에 데이터를 쓰지 않아야합니다.이 주소는 요청을 시작한 프로세스의 가상 주소 공간에있는 이며 현재 프로세스와 같지 않을 가능성이 있습니다.
누구나 이것을 다른 말로 설명 할 수 있습니까? 포인트 2, 3, 4는 명확하지 않습니다. 감사합니다. .