Creazione di un oggetto Device (piattaforma di filtro di Windows)
Un driver di callout deve creare un oggetto dispositivo prima di poter registrare i callout con il motore di filtro. In che modo un driver di callout crea un oggetto dispositivo dipende dal fatto che il driver di callout sia basato sul modello di driver Windows (WDM) o windows Driver Frameworks (WDF).
driver di callout WDM-Based
Se un driver di callout si basa su WDM, crea un oggetto dispositivo chiamando la funzione IoCreateDevice . Ad esempio:
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 di callout WDF-Based
Se un driver di callout si basa su WDF, crea un oggetto dispositivo framework chiamando la funzione WdfDeviceCreate . Per registrare i callout con il motore di filtro, un driver di callout basato su WDF deve ottenere un puntatore all'oggetto dispositivo WDM associato all'oggetto dispositivo framework. Un driver di callout basato su WDF ottiene un puntatore a questo oggetto dispositivo WDM chiamando la funzione WdfDeviceWdmGetDeviceObject . Ad esempio:
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;
}