Windows
我可以在 Windows Server Core docker 容器中安裝驅動程序嗎?
我們有一個需要驅動程序的應用程序。作為實驗和測試目的,我們考慮使用基於
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 容器中學到的東西