Menginisialisasi Target I/O Umum

Kerangka kerja menginisialisasi target I/O lokal driver untuk perangkat ketika driver memanggil WdfDeviceCreate. Untuk mengambil handel ke target I/O lokal perangkat, driver memanggil WdfDeviceGetIoTarget.

Sebagian besar driver mengirim permintaan hanya ke target I/O lokal mereka.

Untuk menginisialisasi target I/O jarak jauh untuk perangkat, driver harus:

  1. Panggil WdfIoTargetCreate untuk membuat objek target I/O.

  2. Panggil WdfIoTargetOpen untuk membuka target I/O sehingga driver dapat mengirim permintaan ke dalamnya.

Ketika driver memanggil WdfIoTargetOpen, biasanya mengidentifikasi target I/O jarak jauh dengan menyediakan string Unicode yang mewakili nama objek. Nama ini dapat mengidentifikasi perangkat, file, atau antarmuka perangkat. Kerangka kerja mengirimkan permintaan I/O ke bagian atas tumpukan driver yang mendukung nama objek.

Jarang, driver mungkin mengidentifikasi target I/O jarak jauh dengan memasok pointer ke struktur DEVICE_OBJECT Windows Driver Model (WDM). Pointer ini mengidentifikasi driver yang berbeda dalam tumpukan driver panggilan. Driver berbasis kerangka kerja jarang menggunakan teknik ini karena jarang memiliki akses ke struktur DEVICE_OBJECT driver lain.

Contoh berikut menunjukkan bagaimana driver sampel Ndisedge menggunakan teknik di atas untuk membuat dan membuka target I/O jarak jauh:

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;
    }