Inizializzazione di una destinazione di I/O generale
Il framework inizializza la destinazione di I/O locale di un driver per un dispositivo quando il driver chiama WdfDeviceCreate. Per recuperare un handle nella destinazione di I/O locale di un dispositivo, il driver chiama WdfDeviceGetIoTarget.
La maggior parte dei driver invia richieste solo alla destinazione di I/O locale.
Per inizializzare una destinazione di I/O remota per un dispositivo, il driver deve:
Chiamare WdfIoTargetCreate per creare un oggetto di destinazione I/O.
Chiamare WdfIoTargetOpen per aprire una destinazione di I/O in modo che il driver possa inviare richieste.
Quando il driver chiama WdfIoTargetOpen, in genere identifica la destinazione di I/O remota fornendo una stringa Unicode che rappresenta un nome dell'oggetto. Questo nome può identificare un dispositivo, un file o un'interfaccia del dispositivo. Il framework invia richieste di I/O all'inizio dello stack di driver che supporta il nome dell'oggetto.
Raramente, un driver potrebbe identificare una destinazione di I/O remota fornendo un puntatore a una struttura WDM (Windows Driver Model DEVICE_OBJECT ). Questo puntatore identifica un driver diverso nello stack del driver chiamante. I driver basati su framework usano raramente questa tecnica perché raramente hanno accesso alle strutture DEVICE_OBJECT di altri driver.
Nell'esempio seguente viene illustrato come il driver di esempio Ndisedge usa la tecnica precedente per creare e aprire una destinazione di I/O remota:
status = WdfIoTargetCreate(Adapter->WdfDevice,
WDF_NO_OBJECT_ATTRIBUTES,
&Adapter->IoTarget);
if (!NT_SUCCESS(status)) {
DEBUGP(MP_ERROR, ("WdfIoTargetCreate failed 0x%x\n",
status));
return status;
}
WDF_IO_TARGET_OPEN_PARAMS_INIT_CREATE_BY_NAME(&openParams,
&fileName,
STANDARD_RIGHTS_ALL
);
status = WdfIoTargetOpen(Adapter->IoTarget,
&openParams);
if (!NT_SUCCESS(status)) {
DEBUGP(MP_ERROR, ("WdfIoTargetOpen failed 0x%x\n", status));
return status;
}