UrsDeviceInitialize 함수(ursdevice.h)
USB 이중 역할 컨트롤러와 관련된 작업을 지원하도록 프레임워크 디바이스 개체를 초기화하고 관련 이벤트 콜백 함수를 USB 이중 역할 컨트롤러 클래스 확장에 등록합니다.
구문
NTSTATUS UrsDeviceInitialize(
[in] WDFDEVICE Device,
[in] PURS_CONFIG Config
);
매개 변수
[in] Device
클라이언트 드라이버가 WdfDeviceCreate에 대한 이전 호출에서 검색한 프레임워크 디바이스 개체에 대한 핸들입니다.
[in] Config
클라이언트 드라이버가 URS_CONFIG_INIT 호출하여 초기화한 URS_CONFIG 구조체에 대한 포인터입니다.
반환 값
메서드는 작업이 성공하면 STATUS_SUCCESS 반환합니다. 그렇지 않으면 이 메서드가 적절한 NTSTATUS 오류 코드를 반환할 수 있습니다.
설명
USB 이중 역할 컨트롤러의 클라이언트 드라이버는 WdfDeviceCreate 호출 후에 이 메서드를 호출해야 합니다.
클라이언트 드라이버는 EvtDriverDeviceAdd 구현에서 이 메서드를 호출합니다.
이 호출 중에 클라이언트 드라이버 제공 이벤트 콜백 구현도 URS_CONFIG 적절한 멤버를 설정하여 등록됩니다.
메서드는 호스트 및 함수 역할에 대한 리소스 목록과 컨트롤러로 전송되는 IOCTL 요청을 처리하는 데 필요한 큐를 만듭니다. 각 역할 전환 작업을 사용하면 현재 역할의 자식 디바이스 스택이 삭제되고 새 역할에 대한 디바이스 스택이 로드됩니다. UrsDeviceInitialize 메서드는 해당 디바이스 스택을 빌드하는 데 사용되는 식별 정보를 검색합니다. 또한 메서드는 ACPI와 같은 기본 버스에서 디바이스에 대한 정보를 검색합니다.
예제
EVT_URS_DEVICE_FILTER_RESOURCE_REQUIREMENTS EvtUrsFilterResourceRequirements;
EVT_URS_SET_ROLE EvtUrsSetRole;
EvtDriverDeviceAdd (
_In_ WDFDRIVER Driver,
_Inout_ PWDFDEVICE_INIT DeviceInit
)
{
...
WDFDEVICE device;
NTSTATUS status;
WDF_OBJECT_ATTRIBUTES attributes;
URS_CONFIG ursConfig;
...
status = UrsDeviceInitInitialize(DeviceInit);
if (!NT_SUCCESS(status)) {
//UrsDeviceInitInitialize failed.
return status;
}
WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(&attributes, DRIVER_CONTEXT);
status = WdfDeviceCreate(&DeviceInit, &attributes, &device);
if (!NT_SUCCESS(status)) {
// WdfDeviceCreate failed.
return status;
}
URS_CONFIG_INIT(&ursConfig, UrsHostInterfaceTypeXhci, EvtUrsFilterResourceRequirements);
ursConfig.EvtUrsSetRole = EvtUrsSetRole;
status = UrsDeviceInitialize(device, &ursConfig);
if (!NT_SUCCESS(status)) {
// UrsDeviceInitialize failed.
return status;
}
...
}
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 10 |
지원되는 최소 서버 | Windows Server 2016 |
대상 플랫폼 | Windows |
최소 KMDF 버전 | 1.15 |
머리글 | ursdevice.h(Urscx.h 포함) |
라이브러리 | Urscxstub.lib |
IRQL | PASSIVE_LEVEL |