Compartir a través de


Crear un objeto Device (Plataforma de filtrado de Windows)

Un controlador de llamada debe crear un objeto de dispositivo para poder registrar sus llamadas con el motor de filtro. La forma en que un controlador de llamada crea un objeto de dispositivo depende de si el controlador de llamada se basa en el modelo de controlador de Windows (WDM) o en los marcos de windows Driver Framework (WDF).

controladores de llamada de WDM-Based

Si un controlador de llamada se basa en WDM, crea un objeto de dispositivo mediante una llamada a la función IoCreateDevice . Por ejemplo:

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

controladores de llamada de WDF-Based

Si un controlador de llamada se basa en WDF, crea un objeto de dispositivo de marco llamando a la función WdfDeviceCreate . Para registrar sus llamadas con el motor de filtro, un controlador de llamada basado en WDF debe obtener un puntero al objeto de dispositivo WDM asociado al objeto de dispositivo de marco. Un controlador de llamada basado en WDF obtiene un puntero a este objeto de dispositivo WDM llamando a la función WdfDeviceWdmGetDeviceObject . Por ejemplo:

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