共用方式為


判斷操作系統是否以安全模式執行

本主題描述設備驅動器如何判斷其執行所在的操作系統是否以安全模式啟動。 本主題也說明如何防止驅動程式以安全模式運作。

Microsoft Windows 操作系統核心會匯出名為 InitSafeBootMode 的指標。 InitSafeBootMode 指向 ULONG 變數,其中包含目前作用中的安全模式設定。 設備驅動器可以檢查這些設定,以判斷操作系統是否以安全模式執行。

下表列出 InitSafeBootMode 變數值的模式。

模式

0

操作系統不在安全模式中。

1

SAFEBOOT_MINIMAL

2

SAFEBOOT_NETWORK

3*

SAFEBOOT_DSREPAIR

注意 * 值 3 僅適用於 Windows 域控制器。

若要使用 InitSafeBootMode 變數,您必須在驅動程式中宣告它,如下列程式代碼範例所示。

extern PULONG InitSafeBootMode;

宣告 InitSafeBootMode 之後,您可以使用下列程式代碼範例來判斷作業系統是否以安全模式執行。

if (*InitSafeBootMode > 0) {
    // The operating system is in Safe Mode.
    // Take appropriate action.
    //
}

若要防止驅動程式在安全模式中運作,請使用下列清單中符合驅動程式類型的技術:

  • 函式驅動程式

    如果您的函式驅動程式的服務啟動類型為 SERVICE_BOOT_START,請檢查函式驅動程式 AddDevice 例程中的 InitSafeBootMode 值。 如果系統處於安全模式,則傳回失敗狀態。

    注意 您絕對不能從 DriverEntry 例程傳回失敗。

  • 篩選驅動程式

    如果您的篩選驅動程式在系統啟動期間啟動,請檢查篩選驅動程式 AddDevice 例程中的 InitSafeBootMode 值。 如果作業系統處於安全模式,請執行下列動作:

    1. 請勿將篩選裝置物件附加至裝置堆疊。
    2. 從篩選驅動程式的 AddDevice 例程傳回成功。
  • 其他驅動程式

    對於函式或篩選驅動程式以外的驅動程式,請檢查驅動程式 DriverEntry 例程中的 InitSafeBootMode 值。 如果操作系統處於安全模式,則傳回失敗狀態。