Bagikan melalui


Menentukan Fungsi Bongkar

Driver callout harus menyediakan fungsi unload. Sistem operasi memanggil fungsi ini ketika driver callout dibongkar dari sistem. Fungsi bongkar driver callout harus menjamin bahwa callout driver callout tidak terdaftar dari mesin filter sebelum driver callout dibongkar dari memori sistem. Driver callout tidak dapat dibongkar dari sistem jika tidak menyediakan fungsi unload.

Bagaimana driver callout menentukan fungsi unload tergantung pada apakah driver callout didasarkan pada Windows Driver Model (WDM) atau Windows Driver Frameworks (WDF).

Driver Callout WDM-Based

Jika driver callout didasarkan pada WDM, ia menentukan fungsi Unload dalam fungsi DriverEntry-nya . Contohnya:

VOID
 Unload(
    IN PDRIVER_OBJECT DriverObject
    );

NTSTATUS
 DriverEntry(
    IN PDRIVER_OBJECT DriverObject,
    IN PUNICODE_STRING RegistryPath
    )
{
  ...

  // Specify the callout driver's Unload function
 DriverObject->DriverUnload = Unload;

  ...
}

Driver Callout WDF-Based

Jika driver callout didasarkan pada WDF, driver tersebut menentukan fungsi EvtDriverUnload dalam fungsi DriverEntry-nya . Contohnya:

VOID
 Unload(
    IN WDFDRIVER Driver
    );

NTSTATUS
 DriverEntry(
    IN PDRIVER_OBJECT DriverObject,
    IN PUNICODE_STRING RegistryPath
    )
{
  NTSTATUS status;
  WDF_DRIVER_CONFIG config;
  WDFDRIVER driver;

  ...

  // Initialize the driver config structure
  WDF_DRIVER_CONFIG_INIT(&config, NULL);

  // Indicate that this is a non-PNP driver
 config.DriverInitFlags = WdfDriverInitNonPnpDriver;

  // Specify the callout driver's Unload function
 config.EvtDriverUnload = Unload;

  // Create a WDFDRIVER object
 status =
 WdfDriverCreate(
 DriverObject,
 RegistryPath,
      NULL,
      &config,
      &driver
      );

  ...

 return status;
}

Untuk informasi tentang cara menerapkan fungsi bongkar driver callout, lihat Membongkar Driver Callout.