次の方法で共有


デバイス オブジェクトの作成 (Windows フィルタリング プラットフォーム)

吹き出しドライバーは、その吹き出しをフィルター エンジンに登録する前に、デバイス オブジェクトを作成する必要があります。 吹き出しドライバーがデバイス オブジェクトを作成する方法は、引き出しドライバーが Windows ドライバー モデル (WDM) または Windows ドライバー フレームワーク (WDF) に基づいているかどうかによって異なります。

WDM ベースのコールアウト ドライバー

吹き出しドライバーが WDM に基づいている場合は、IoCreateDevice 関数を呼び出してデバイス オブジェクトを作成します。 次に例を示します。

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

WDF ベースのコールアウト ドライバー

コールアウト ドライバーが WDF に基づいている場合は、WdfDeviceCreate関数を呼び出してフレームワーク デバイス オブジェクトを作成します。 その吹き出しをフィルター エンジンに登録するには、WDF ベースの吹き出しドライバーは、フレームワーク デバイス オブジェクトに関連付けられている WDM デバイス オブジェクトへのポインターを取得する必要があります。 WDF ベースの吹き出しドライバーは、WdfDeviceWdmGetDeviceObject 関数を呼び出すことによって、この WDM デバイス オブジェクトへのポインターを取得します。 次に例を示します。

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