Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
En callout-drivrutin måste skapa ett enhetsobjekt innan den kan registrera callouts med filtermotorn. Hur en callout-drivrutin skapar ett enhetsobjekt beror på om callout-drivrutinen baseras på Windows Driver Model (WDM) eller Windows Driver Frameworks (WDF).
WDM-Based anropsdrivrutiner
Om en callout-drivrutin baseras på WDM skapar den ett enhetsobjekt genom att anropa funktionen IoCreateDevice. Till exempel:
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 utropsdrivrutiner
Om en callout-drivrutin baseras på WDF skapar den ett ramverksenhetsobjekt genom att anropa funktionen WdfDeviceCreate. För att registrera dess callouts med filtermotorn måste en WDF-baserad calloutdrivrutin hämta en pekare till WDM-enhetsobjektet som är associerat med ramverkets enhet. En WDF-baserad utropsdrivrutin hämtar en pekare till det här WDM-enhetsobjektet genom att anropa funktionen WdfDeviceWdmGetDeviceObject. Till exempel:
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;
}