共用方式為


在 64 位驅動程式中支援 32 位 I/O

Windows 上的 Windows (WOW64) 可讓 Microsoft Win32 使用者模式應用程式在 64 位 Windows 上執行。 其作法是攔截 Win32 函數調用,並視需要將參數從 32 位指標類型轉換成 64 位指標類型,再轉換至 64 位核心。 此轉換稱為 Thunking,會針對所有 Win32 函式自動完成,但有一個重要的例外狀況:傳遞至 DeviceIoControl 的數據緩衝區。 這些緩衝區的內容是由 InputBufferOutputBuffer 參數所指向,因為其結構是驅動程式專屬的,所以不會被叫用。

注意 雖然緩衝區 內容 不是 Thunked,但緩衝區 指標 會轉換成 64 位指標。

使用者模式應用程式會呼叫 DeviceIoControl ,直接將 I/O 要求傳送至指定的內核模式驅動程式。 此要求包含 IOCTL (IOCTL) 或檔案系統控制程式代碼 (FSCTL) 和輸入和輸出數據緩衝區的指標。 這些數據緩衝區的格式專屬於IOCTL或 FSCTL,而IOCTL或 FSCTL 接著是由內核模式驅動程式所定義。 因為緩衝區格式是任意的,而且因為驅動程式知道,而不是 WOW64,所以數據指向驅動程式的工作會保留給驅動程式。

如果您的 64 位驅動程式都成立,則您的 64 位驅動程式必須支援 32 位 I/O:

  • 驅動程式會將IOCTL (或 FSCTL) 公開給使用者模式應用程式。

  • IOCTL 所使用的至少一個 I/O 緩衝區包含指標精確度數據類型。

  • 您的 IOCTL 程式代碼無法輕易重寫,以消除使用指標精確度緩衝區數據類型。