デバイス オブジェクトの作成 (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;
}