Erstellen eines Geräteobjekts (Windows-Filterplattform)
Ein Legendentreiber muss ein Geräteobjekt erstellen, bevor er seine Legenden bei der Filter-Engine registrieren kann. Wie ein Legendentreiber ein Geräteobjekt erstellt, hängt davon ab, ob der Legendentreiber auf dem Windows-Treibermodell (WDM) oder den Windows Driver Frameworks (WDF) basiert.
WDM-Based-Beschriftungstreiber
Wenn ein Legendentreiber auf WDM basiert, wird ein Geräteobjekt erstellt, indem die IoCreateDevice-Funktion aufgerufen wird. Beispiel:
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-Based-Beschriftungstreiber
Wenn ein Legendentreiber auf WDF basiert, wird ein Framework-Geräteobjekt erstellt, indem die WdfDeviceCreate-Funktion aufgerufen wird. Um seine Legenden bei der Filter-Engine zu registrieren, muss ein WDF-basierter Legendentreiber einen Zeiger auf das WDM-Geräteobjekt abrufen, das dem Framework-Geräteobjekt zugeordnet ist. Ein WDF-basierter Legendentreiber ruft durch Aufrufen der WdfDeviceWdmGetDeviceObject-Funktion einen Zeiger auf dieses WDM-Geräteobjekt ab. Beispiel:
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;
}