Partager via


Création d’un objet Device (plateforme de filtrage Windows)

Un pilote de légende doit créer un objet d’appareil avant de pouvoir inscrire ses légendes auprès du moteur de filtre. La façon dont un pilote de légende crée un objet d’appareil dépend si le pilote de légende est basé sur le modèle de pilote Windows (WDM) ou les frameworks de pilotes Windows (WDF).

pilotes de légende WDM-Based

Si un pilote de légende est basé sur WDM, il crée un objet d’appareil en appelant la fonction IoCreateDevice . Par exemple :

PDEVICE_OBJECT deviceObject;

NTSTATUS
 DriverEntry(
    IN PDRIVER_OBJECT DriverObject,
    IN PUNICODE_STRING RegistryPath
    )
{
  NTSTATUS status;

  ...

  // Create a device object
 status =
 IoCreateDevice(
 DriverObject,
      0,
      NULL,
      FILE_DEVICE_UNKNOWN,
      FILE_DEVICE_SECURE_OPEN,
      FALSE,
      &deviceObject
      );

  ...

 return status;
}

pilotes de légende WDF-Based

Si un pilote de légende est basé sur WDF, il crée un objet d’appareil framework en appelant la fonction WdfDeviceCreate . Pour inscrire ses légendes auprès du moteur de filtre, un pilote de légende WDF doit obtenir un pointeur vers l’objet de périphérique WDM associé à l’objet d’appareil framework. Un pilote de légende WDF obtient un pointeur vers cet objet d’appareil WDM en appelant la fonction WdfDeviceWdmGetDeviceObject . Par exemple :

WDFDEVICE wdfDevice;

NTSTATUS
 DriverEntry(
    IN PDRIVER_OBJECT DriverObject,
    IN PUNICODE_STRING RegistryPath
    )
{
  WDFDRIVER driver;
  PWDFDEVICE_INIT deviceInit;
  PDEVICE_OBJECT deviceObject;
  NTSTATUS status;

  ...

  // Allocate a device initialization structure
 deviceInit =
 WdfControlDeviceInitAllocate(
    driver;
    &SDDL_DEVOBJ_KERNEL_ONLY
    );

  // Set the device characteristics
 WdfDeviceInitSetCharacteristics(
    deviceInit,
    FILE_DEVICE_SECURE_OPEN,
    FALSE
    );

  // Create a framework device object
 status =
 WdfDeviceCreate(
    &deviceInit,
    WDF_NO_OBJECT_ATTRIBUTES,
    &wdfDevice
    );

  // Check status
 if (status == STATUS_SUCCESS) {

    // Initialization of the framework device object is complete
    WdfControlFinishInitializing(
      wdfDevice
    );

    // Get the associated WDM device object
    deviceObject = WdfDeviceWdmGetDeviceObject(wdfDevice);
  }

  ...

 return status;
}