共用方式為


啟動順序

由於配接卡驅動程式會安裝為核心模式驅動程式服務,因此作業系統會在系統啟動時載入配接卡驅動程式,並呼叫驅動程式的 DriverEntry 常式。 DriverEntry 常式會接收兩個參數:驅動程式物件和登錄路徑名稱。 DriverEntry 應該呼叫 PortCls 函式 PcInitializeAdapterDriver ,其中包含驅動程式物件和登錄路徑名稱參數,加上第三個參數,這是配接器驅動程式 AddDevice 函式的指標。

在下列範例中,驅動程式的 DriverEntry 函式會傳遞函式指標 MyAddDevice,該指標指向驅動程式的 AddDevice 函式,作為 PcInitializeAdapterDriver 常式的第三個參數。

NTSTATUS 
  DriverEntry( 
    PDRIVER_OBJECT  DriverObject,
    PUNICODE_STRING  RegistryPath
    )
  {
      return PcInitializeAdapterDriver(DriverObject, RegistryPath, MyAddDevice);
  }

PcInitializeAdapterDriver 常式會在驅動程式物件的驅動程式延伸模組中安裝提供的 AddDevice 常式,並在驅動程式物件本身中安裝 PortCls 驅動程式的 IRP 處理常式。

下列程式碼是驅動程式函 MyAddDevice 式的實作範例。

#define MAX_MINIPORTS 6    // maximum number of miniports
NTSTATUS
  MyAddDevice(
    PDRIVER_OBJECT  DriverObject,
    PDEVICE_OBJECT  PhysicalDeviceObject 
    )
  {
      return PcAddAdapterDevice(DriverObject, PhysicalDeviceObject, MyStartDevice,
                                MAX_MINIPORTS, 0);
  }

此函式會呼叫 PortCls 函式 PcAddAdapterDevice,以建立指定的配接器裝置、將驅動程式與裝置產生關聯,並儲存配接器驅動程式函 MyStartDevice 式的指標,當作業系統啟動裝置時會呼叫該函式 (請參閱 啟動裝置) 。 PcAddAdapterDevice 常式會建立功能裝置物件 (FDO) ,並將它與系統所提供的實體裝置物件 (PDO) 相關聯。 新的 FDO 是使用 PortCls 用來儲存裝置相關內容資訊的延伸模組來建立。 此環境定義包括由MyAddDevice提供的MyStartDevice函數指標。

作業系統決定要指派給裝置的資源 (中斷、DMA 通道、I/O 埠位址等等) 之後,會傳送裝置啟動要求 (IRP_MN_START_DEVICE) 。 為了回應此要求,PortCls 驅動程式中的要求處理常式會呼叫配接器驅動程式的 MyStartDevice 函式,如下列範例程式碼所示:

NTSTATUS
  MyStartDevice(
    PDEVICE_OBJECT DeviceObject,
    PIRP Irp,
    PRESOURCELIST ResourceList
    )
  {
    ...
  }

請求處理程式會提供 MyStartDevice 指向裝置物件、IRP_MN_START_DEVICE 請求和資源清單的指標(請參閱 IResourceList)。 函 MyStartDevice 式會將資源清單分割成每個需要啟動的迷你埠驅動程式所需的資源。 然後,函式會啟動每個迷你埠驅動程式,並將控制權傳回給 PortCls,這會完成 IRP 並將控制權傳回給作業系統。

如需驅動程式啟動程式代碼的更多範例,請參閱 Microsoft Windows 驅動程式套件 (WDK) 中的範例音訊配接器驅動程式。