Criando um objeto device (Plataforma de Filtragem do Windows)
Um driver de texto explicativo deve criar um objeto de dispositivo antes de poder registrar seus textos explicativos com o mecanismo de filtro. Como um driver de texto explicativo cria um objeto de dispositivo depende se o driver de texto explicativo é baseado no WDM (Modelo de Driver do Windows) ou no WDF (Windows Driver Frameworks).
Drivers de texto explicativo do WDM-Based
Se um driver de texto explicativo for baseado no WDM, ele criará um objeto de dispositivo chamando a função IoCreateDevice . Por exemplo:
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;
}
Drivers de texto explicativo do WDF-Based
Se um driver de texto explicativo for baseado no WDF, ele criará um objeto de dispositivo de estrutura chamando a função WdfDeviceCreate . Para registrar seus textos explicativos com o mecanismo de filtro, um driver de texto explicativo baseado em WDF deve obter um ponteiro para o objeto de dispositivo WDM associado ao objeto de dispositivo de estrutura. Um driver de texto explicativo baseado em WDF obtém um ponteiro para esse objeto de dispositivo WDM chamando a função WdfDeviceWdmGetDeviceObject . Por exemplo:
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;
}