ExSetResourceOwnerPointerEx 함수(wdm.h)
ExSetResourceOwnerPointerEx 루틴은 리소스 소유자를 식별하는 시스템 주소인 소유자 포인터로 임원 리소스의 소유권을 이전합니다.
통사론
void ExSetResourceOwnerPointerEx(
[in, out] PERESOURCE Resource,
[in] PVOID OwnerPointer,
[in] ULONG Flags
);
매개 변수
[in, out] Resource
호출 스레드가 소유한 임원 리소스(불투명 ERESOURCE 구조)에 대한 포인터입니다. 호출자는 이전에 이 구조를 할당하고 ExInitializeResourceLite 루틴을 호출하여 초기화했습니다. 자세한 내용은 다음 설명 섹션을 참조하세요.
[in] OwnerPointer
리소스 소유자를 식별하는 포인터 값입니다. 이 매개 변수 값은 명목상 ERESOURCE_THREAD 형식의 값에 대한 포인터이지만 PVOID 형식으로 캐스팅됩니다. 호출자는 이 포인터 값의 최소 비트 2개를 해당 비트로 설정해야 합니다. 자세한 내용은 다음 설명 섹션을 참조하세요.
[in] Flags
이 루틴의 작업을 수정할 수 있는 플래그 집합입니다. 이 매개 변수를 0으로 설정하거나 다음 플래그 값으로 설정합니다.
- FLAG_OWNER_POINTER_IS_THREAD
반환 값
없음
발언
이 루틴은 Windows 운영 체제의 Windows 7 이상 버전에서 사용할 수 있습니다.
ExSetResourceOwnerPointerEx 사용하면 리소스 관리자 역할을 하는 스레드가 스레드가 이미 획득한 임원 리소스의 소유권을 다른 스레드로 이전한 다음 리소스를 사용할 수 있습니다. 임원 리소스는 ERESOURCE 구조로 표시됩니다.
호출자는 OwnerPointer 매개 변수 값 중 가장 중요한 두 비트를 해당 비트로 설정해야 합니다. 운영 체제는 이러한 비트를 내부적으로 사용하여 ExSetResourceOwnerPointerEx 호출에 의해 설정된 소유자 포인터를 ExAcquireResourceExclusiveLite 호출하거나 exAcquireResourceSharedLite 루틴을 리소스를 획득한 스레드와 구분합니다.
ExSetResourceOwnerPointerEx 호출하여 리소스 소유권을 이전하는 스레드는 이전에 ExAcquireResourceXxxLite 루틴을 호출한 스레드와 동일해야 합니다.
resource-manager 스레드가 단독 액세스를 위해 리소스를 획득한 경우(ExAcquireResourceExclusiveLite호출) ExSetResourceOwnerPointerEx 호출은 리소스-사용자 스레드에 대한 단독 액세스 소유권을 전송합니다. 리소스 관리자 스레드가 공유 액세스를 위해 리소스를 획득한 경우(ExAcquireResourceSharedLite호출) ExSetResourceOwnerPointerEx 호출은 공유 액세스 소유권을 리소스-사용자 스레드로 전송합니다.
리소스 사용자 스레드에 더 이상 리소스가 필요하지 않은 경우 리소스를 해제해야 합니다. 일반적으로 리소스 사용자 스레드는 리소스를 해제합니다. 이렇게 하려면 ExReleaseResourceForThreadLite 루틴을 호출해야 합니다. 이 호출에서 ThreadId 매개 변수 값은 리소스 소유권을 양도한 이전 ExSetResourceOwnerPointerEx 호출에서 OwnerPointer 매개 변수의 값과 일치해야 합니다(최소 두 비트 포함).
ExSetResourceOwnerPointerEx 호출이 리소스의 소유권을 전송하면 드라이버가 지정된 리소스에 대해 호출할 수 있는 다른 ERESOURCE 루틴 ExReleaseResourceForThreadLite . 이 리소스에 대해 ExReleaseResourceLite같은 다른 ERESOURCE 루틴을 호출하려는 시도는 오류입니다.
ExSetResourceOwnerPointerEx 크게 다른 두 가지 모드에서 작동할 수 있습니다. 모드는 Flags 매개 변수에 의해 지정됩니다. 두 모드 중 더 다양한 기능을 선택하려면 Flags = FLAG_OWNER_POINTER_IS_THREAD 설정합니다. 이 플래그 값은 OwnerPointer 매개 변수가 resource-manager 스레드의 스레드 개체에 대한 포인터임을 운영 체제에 알릴 수 있습니다. 운영 체제는 필요한 경우 이 정보를 사용하여 우선 순위 반전을 방지하기 위해 일시적으로 이 스레드의 우선 순위를 높일 수 있습니다. OwnerPointer 값에 사용할 스레드 개체 포인터를 가져오려면 드라이버는 ExGetCurrentResourceThread 루틴을 호출할 수 있습니다. OwnerPointer 값 중 가장 중요한 두 비트를 값으로 설정해야 합니다.
Flags 0인 경우 ExSetResourceOwnerPointerEx 동작은 Windows 2000 이상 버전의 Windows 운영 체제에서 사용할 수 있는 레거시 ExSetResourceOwnerPointer 루틴의 동작과 동일합니다. 즉, OwnerPointer 매개 변수는 ExSetResourceOwnerPointerEx호출하기 전에 리소스 관리자 스레드가 시스템 메모리에 할당하는 스토리지 개체를 가리킵니다. 이 경우 ExSetResourceOwnerPointerEx 개체 자체에 액세스하려고 시도하지 않으므로 개체 형식과 값은 관련이 없습니다. 대신 루틴은 단순히 개체의 메모리 주소를 사용하여 리소스 소유자를 식별합니다. 개체의 스토리지는 메모리의 짝수 4비트 경계에서 시작해야 합니다. 두 드라이버가 실수로 동일한 소유자 포인터를 동시에 사용하지 못하도록 하려면 리소스 관리자 스레드는 리소스가 해제될 때까지 개체에 대한 스토리지를 해제하지 않아야 합니다.
경영진 리소스 관리에 대한 자세한 내용은 ERESOURCE 루틴 소개참조하세요.
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 운영 체제의 Windows 7 이상 버전에서 사용할 수 있습니다. |
대상 플랫폼 | 보편적 |
헤더 | wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함) |
라이브러리 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |
DDI 규정 준수 규칙 | HwStorPortProhibitedDDIs(storport) |
참고 항목
exAcquireResourceExclusiveLite