Compartilhar via


Criando um objeto device (Plataforma de Filtragem do Windows)

Um driver de texto explicativo deve criar um objeto de dispositivo antes de poder registrar seus textos explicativos com o mecanismo de filtro. Como um driver de texto explicativo cria um objeto de dispositivo depende se o driver de texto explicativo é baseado no WDM (Modelo de Driver do Windows) ou no WDF (Windows Driver Frameworks).

Drivers de texto explicativo do WDM-Based

Se um driver de texto explicativo for baseado no WDM, ele criará um objeto de dispositivo chamando a função IoCreateDevice . Por exemplo:

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

Drivers de texto explicativo do WDF-Based

Se um driver de texto explicativo for baseado no WDF, ele criará um objeto de dispositivo de estrutura chamando a função WdfDeviceCreate . Para registrar seus textos explicativos com o mecanismo de filtro, um driver de texto explicativo baseado em WDF deve obter um ponteiro para o objeto de dispositivo WDM associado ao objeto de dispositivo de estrutura. Um driver de texto explicativo baseado em WDF obtém um ponteiro para esse objeto de dispositivo WDM chamando a função WdfDeviceWdmGetDeviceObject . Por exemplo:

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