Windows

我可以在 Windows Server Core docker 容器中安裝驅動程序嗎?

  • July 3, 2020

我們有一個需要驅動程序的應用程序。作為實驗和測試目的,我們考慮使用基於mcr.microsoft.com/windows/servercore:1903-amd64. 主機作業系統是 Windows 10 1903,它是一款開發筆記型電腦。該驅動程序是一個minifilter文件系統驅動程序,它似乎安裝OK,但啟動失敗。應用程序本身是在 x64/x86 上執行的 32 位可移植執行檔。

是否可以在 Windows Server docker 映像中安裝和執行 minifilter 文件系統驅動程序?

在 docker 實例上執行的命令的輸出sc如下:

C:\>sc start foo
SERVICE_NAME: foo
       TYPE               : 2  FILE_SYSTEM_DRIVER
       STATE              : 1  STOPPED
       WIN32_EXIT_CODE    : 1077  (0x435)
       SERVICE_EXIT_CODE  : 0  (0x0)
       CHECKPOINT         : 0x0
       WAIT_HINT          : 0x0
       PID                : 0
       FLAGS              :
C:\>sc query foo
SERVICE_NAME: foo
       TYPE               : 2  FILE_SYSTEM_DRIVER
       STATE              : 1  STOPPED
       WIN32_EXIT_CODE    : 1077  (0x435)
       SERVICE_EXIT_CODE  : 0  (0x0)
       CHECKPOINT         : 0x0
       WAIT_HINT          : 0x0

C:\>fltmc
The FltMgr.sys driver is not currently loaded.

目前沒有辦法在 Windows 容器中安裝驅動程序。

但是,Windows 上的容器可以利用主機作業系統上存在的驅動程序。

Unit42 關於逆向工程 Windows 容器的部落格文章描述了 Windows 容器的一些內部工作原理。它指出過濾發生在系統呼叫級別:

有大量危險的系統呼叫和不止一個核心函式來確定呼叫程序或執行緒是否在孤島內。對於在容器中載入驅動程序的特定情況,我發現 Windows 確實在核心中進行了充分檢查,這也與許多其他系統呼叫相關。在這種情況下,實際載入核心驅動程序映像IopLoadDriverImage的函式NtLoadDriver呼叫只是返回一個值,指示呼叫程序是否在筒倉內。

您可以在此處找到整個部落格文章以了解更多詳細資訊:我從逆向工程 Windows 容器中學到的東西

引用自:https://serverfault.com/questions/1011433