다음을 통해 공유


일반 I/O 대상 초기화

프레임워크는 드라이버가 WdfDeviceCreate를 호출할 때 디바이스에 대한 드라이버의 로컬 I/O 대상을 초기화합니다. 디바이스의 로컬 I/O 대상에 대한 핸들을 검색하기 위해 드라이버는 WdfDeviceGetIoTarget을 호출합니다.

대부분의 드라이버는 로컬 I/O 대상에만 요청을 보냅니다.

디바이스에 대한 원격 I/O 대상을 초기화하려면 드라이버는 다음을 수행해야 합니다.

  1. WdfIoTargetCreate를 호출하여 I/O 대상 개체를 만듭니다.

  2. 드라이버가 요청을 보낼 수 있도록 WdfIoTargetOpen 을 호출하여 I/O 대상을 엽니다.

드라이버는 WdfIoTargetOpen을 호출할 때 일반적으로 개체 이름을 나타내는 유니코드 문자열을 제공하여 원격 I/O 대상을 식별합니다. 이 이름은 디바이스, 파일 또는 디바이스 인터페이스를 식별할 수 있습니다. 프레임워크는 개체 이름을 지원하는 드라이버 스택의 맨 위에 I/O 요청을 보냅니다.

드라이버가 WDM(Windows 드라이버 모델) DEVICE_OBJECT 구조체에 대한 포인터를 제공하여 원격 I/O 대상을 식별하는 경우는 거의 없습니다 . 이 포인터는 호출 드라이버 스택 내의 다른 드라이버를 식별합니다. 프레임워크 기반 드라이버는 다른 드라이버의 DEVICE_OBJECT 구조에 거의 액세스할 수 없기 때문에 이 기술을 거의 사용하지 않습니다.

다음 예제에서는 Ndisedge 샘플 드라이버가 위의 기술을 사용하여 원격 I/O 대상을 만들고 여는 방법을 보여줍니다.

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