64비트 드라이버에서 32비트 I/O 지원
Windows 기반 Windows(WOW64)를 사용하면 Microsoft Win32 사용자 모드 애플리케이션을 64비트 Windows에서 실행할 수 있습니다. Win32 함수 호출을 가로채고 64비트 커널로 전환하기 전에 매개 변수를 32비트 포인터 형식에서 64비트 포인터 형식으로 적절하게 변환하여 이 작업을 수행합니다. unking이라고 하는 이 변환은 DeviceIoControl에 전달된 데이터 버퍼라는 한 가지 중요한 예외를 제외하고 모든 Win32 함수에 대해 자동으로 수행됩니다. InputBuffer 및 OutputBuffer 매개 변수가 가리키는 이러한 버퍼의 내용은 드라이버별 구조이므로 삭제되지 않습니다.
참고 버퍼 내용이 삭제되지는 않지만 버퍼 포인터는 64비트 포인터로 변환됩니다.
사용자 모드 애플리케이션은 DeviceIoControl 을 호출하여 지정된 커널 모드 드라이버에 직접 I/O 요청을 보냅니다. 이 요청에는 I/O 제어 코드(IOCTL) 또는 FSCTL(파일 시스템 제어 코드) 및 입력 및 출력 데이터 버퍼에 대한 포인터가 포함됩니다. 이러한 데이터 버퍼의 형식은 IOCTL 또는 FSCTL에 따라 다릅니다. 이 형식은 커널 모드 드라이버에 의해 정의됩니다. 버퍼 형식은 임의이며 WOW64가 아닌 드라이버에 알려지므로 데이터를 unking하는 작업은 드라이버에 남아 있습니다.
다음이 모두 true인 경우 64비트 드라이버는 32비트 I/O를 지원해야 합니다.
드라이버는 IOCTL(또는 FSCTL)을 사용자 모드 애플리케이션에 노출합니다.
IOCTL에서 사용하는 I/O 버퍼 중 하나 이상에는 포인터 정밀도 데이터 형식이 포함되어 있습니다.
포인터 정밀도 버퍼 데이터 형식을 사용하지 않도록 IOCTL 코드를 쉽게 다시 작성할 수 없습니다.