Określanie funkcji rozładowania

Sterownik wywołania musi zawierać funkcję odciążania. System operacyjny wywołuje tę funkcję, gdy sterownik wywołań zostanie odinstalowany z systemu. Funkcja zwalniania sterownika wywołań zwrotnych musi zagwarantować, że wywołania zwrotne sterownika są wyrejestrowane z silnika filtru przed zwolnieniem sterownika z pamięci systemowej. Nie można usunąć sterownika wywołań zwrotnych z systemu, jeśli nie zapewnia funkcji deinstalacji.

Sposób, w jaki sterownik wywołania zwrotnego określa funkcję odinstalacyjną, zależy od tego, czy sterownik wywołania zwrotnego jest oparty na Modelu Sterowników Windows (WDM) lub Frameworkach Sterowników Windows (WDF).

Sterowniki wywołań oparte na WDM

Jeśli sterownik rozszerzenia jest oparty na WDM, określa funkcję Unload w swojej funkcji DriverEntry. Na przykład:

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;

  ...
}

sterowniki wywołania WDF-Based

Jeśli sterownik wywołań jest oparty na usłudze WDF, określa funkcję EvtDriverUnload w funkcji DriverEntry. Na przykład:

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;
}

Aby uzyskać informacje o sposobie implementowania funkcji usuwania sterownika wywoławczego, zobacz Usuwanie sterownika wywoławczego.