Crear un objeto Device (Plataforma de filtrado de Windows)
Un controlador de llamada debe crear un objeto de dispositivo para poder registrar sus llamadas con el motor de filtro. La forma en que un controlador de llamada crea un objeto de dispositivo depende de si el controlador de llamada se basa en el modelo de controlador de Windows (WDM) o en los marcos de windows Driver Framework (WDF).
controladores de llamada de WDM-Based
Si un controlador de llamada se basa en WDM, crea un objeto de dispositivo mediante una llamada a la función IoCreateDevice . Por ejemplo:
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;
}
controladores de llamada de WDF-Based
Si un controlador de llamada se basa en WDF, crea un objeto de dispositivo de marco llamando a la función WdfDeviceCreate . Para registrar sus llamadas con el motor de filtro, un controlador de llamada basado en WDF debe obtener un puntero al objeto de dispositivo WDM asociado al objeto de dispositivo de marco. Un controlador de llamada basado en WDF obtiene un puntero a este objeto de dispositivo WDM llamando a la función WdfDeviceWdmGetDeviceObject . Por ejemplo:
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;
}