Bagikan melalui


Membuat Objek Perangkat (Platform Pemfilteran Windows)

Driver callout harus membuat objek perangkat sebelum dapat mendaftarkan callout-nya dengan mesin filter. Bagaimana driver callout membuat objek perangkat 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 membuat objek perangkat dengan memanggil fungsi IoCreateDevice . Contohnya:

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

Driver Callout WDF-Based

Jika driver callout didasarkan pada WDF, ia membuat objek perangkat kerangka kerja dengan memanggil fungsi WdfDeviceCreate . Untuk mendaftarkan callout-nya dengan mesin filter, driver callout berbasis WDF harus mendapatkan pointer ke objek perangkat WDM yang terkait dengan objek perangkat kerangka kerja. Driver callout berbasis WDF mendapatkan pointer ke objek perangkat WDM ini dengan memanggil fungsi WdfDeviceWdmGetDeviceObject . Contohnya:

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