일반 I/O 대상 초기화
프레임워크는 드라이버가 WdfDeviceCreate를 호출할 때 디바이스에 대한 드라이버의 로컬 I/O 대상을 초기화합니다. 디바이스의 로컬 I/O 대상에 대한 핸들을 검색하기 위해 드라이버는 WdfDeviceGetIoTarget을 호출합니다.
대부분의 드라이버는 로컬 I/O 대상에만 요청을 보냅니다.
디바이스에 대한 원격 I/O 대상을 초기화하려면 드라이버는 다음을 수행해야 합니다.
WdfIoTargetCreate를 호출하여 I/O 대상 개체를 만듭니다.
드라이버가 요청을 보낼 수 있도록 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;
}