WSCWriteNameSpaceOrder 함수(sporder.h)
WSCWriteNameSpaceOrder 함수는 사용 가능한 Windows 소켓(Winsock) 2 네임스페이스 공급자의 순서를 변경합니다. 네임스페이스 공급자의 순서는 이름 확인을 위해 열거하거나 쿼리할 때 네임스페이스의 우선 순위를 결정합니다.
구문
int WSCWriteNameSpaceOrder(
[in] LPGUID lpProviderId,
[in] DWORD dwNumberOfEntries
);
매개 변수
[in] lpProviderId
WSANAMESPACE_INFO 구조체에 있는 NSProviderId 요소의 배열입니다. NSProviderId 요소의 순서는 네임스페이스 공급자에 대한 새 우선 순위 순서입니다.
[in] dwNumberOfEntries
NSProviderId 배열의 요소 수입니다.
반환 값
함수는 루틴이 성공하면 ERROR_SUCCESS (0)를 반환합니다. 그렇지 않으면 특정 오류 코드를 반환합니다.
오류 코드 | 의미 |
---|---|
NSProviderId 배열은 프로세스 주소 공간 내에 완전히 포함되지 않습니다. | |
하나 이상의 인수가 입력 매개 변수가 잘못되었으며 아무 작업도 수행되지 않았습니다. | |
복구할 수 없는 오류가 발생했습니다. 이 오류는 다음과 같은 여러 조건에서 반환됩니다. 사용자가 Winsock 레지스트리에 쓰는 데 필요한 관리 권한이 없거나 다른 애플리케이션이 현재 네임스페이스 공급자 카탈로그에 쓰고 있습니다. | |
실패하지 않아야 하는 시스템 호출이 실패했습니다. | |
함수는 다른 스레드 또는 프로세스에 의해 호출됩니다. | |
작업을 수행할 수 있는 메모리가 부족했습니다. | |
|
함수는 레지스트리 오류 코드를 반환할 수 있습니다. |
설명
네임스페이스 공급자는 WSCInstallNameSpace 함수를 사용하여 설치됩니다. 네임스페이스 공급자가 처음 설치되는 순서는 WSAEnumNameSpaceProviders를 통해 열거되는 기본 순서를 제어합니다. 더 중요한 것은 이 순서는 클라이언트가 이름 확인을 요청할 때 네임스페이스 공급자가 고려되는 순서도 제어합니다. WSCWriteNameSpaceOrder 함수를 사용하여 네임스페이스 공급자의 순서를 변경할 수 있습니다. 64비트 플랫폼에서는 64비트 프로세스가 32비트 네임스페이스 공급자 카탈로그에서 네임스페이스 공급자의 순서를 변경할 수 있도록 WSCWriteNameSpaceOrder32 함수가 제공됩니다. 64비트 플랫폼에서 네임스페이스 공급자는 WSCInstallNameSpace32 함수를 사용하여 32비트 네임스페이스 공급자 카탈로그에 설치됩니다.
현재 네임스페이스 공급자 카탈로그는 레지스트리 키 아래의 레지스트리에 저장됩니다. HKEY_LOCAL_MACHINE\SYSTEM\Current Control Set\Services\Winsock2\Parameters\NameSpace_Catalog5
이름 확인에 대한 클라이언트 요청은 WSALookupServiceBegin, WSALookupServiceNext 및 WSALookupServiceEnd 루틴을 사용합니다. WSALookupServiceBegin에 전달된 WSAQUERYSET 구조체의 dwNameSpace 멤버는 검색을 제한하거나 모든 네임스페이스를 포함하도록 NS_ALL 단일 네임스페이스(예: NS_DNS)의 식별자로 설정됩니다. 여러 네임스페이스 공급자가 특정 네임스페이스(예: NS_DNS)를 지원하는 경우 lpNSProviderId 멤버가 특정 네임스페이스 공급자로 설정되지 않는 한 요청된 dwNameSpace와 일치하는 모든 네임스페이스 공급자의 결과가 반환됩니다. dwNameSpace 멤버에 대해 NS_ALL 지정하면 모든 네임스페이스 공급자의 결과가 반환됩니다. 결과가 반환되는 순서는 카탈로그의 네임스페이스 공급자 순서에 따라 달라집니다.
Windows SDK에는 설치된 네임스페이스 공급자의 카탈로그를 표시할 수 있는 SpOrder.exe 라는 애플리케이션이 포함되어 있습니다. Windows 소켓 2에는 카탈로그에서 네임스페이스 공급자의 순서를 다시 지정하기 위해 WSCWriteNameSpaceOrder 함수를 내보내는 ws2_32.dll 포함되어 있습니다. 이 인터페이스는 WS2_32.lib와 연결하여 가져올 수 있습니다. WINDOWS XP SP2(서비스 팩 2) 및 Windows Server 2003 SP1(서비스 팩 1) 이상에서 실행되는 컴퓨터의 경우 netsh.exe winsock show 카탈로그 명령은 시스템에 설치된 프로토콜 및 네임스페이스 공급자를 모두 표시합니다.
WSCWriteNameSpaceOrder 는 관리자 그룹의 구성원으로 로그온한 사용자만 호출할 수 있습니다. Administrators 그룹의 멤버가 아닌 사용자가 WSCWriteNameSpaceOrder를 호출하면 함수 호출이 실패하고 WSANO_RECOVERY lpErrno 매개 변수 에 반환됩니다.
Windows Vista 및 Windows Vista에서 실행되는 컴퓨터의 경우 UAC(사용자 계정 제어)로 인해 이 함수가 실패할 수도 있습니다. 이 함수를 포함하는 애플리케이션이 관리자가 아닌 Administrators 그룹의 구성원으로 로그온한 사용자가 실행하는 경우 애플리케이션이 요청된ExecutionLevel 이 requireAdministrator로 설정된 매니페스트 파일에 표시되지 않는 한 이 호출은 실패합니다. Windows Vista 및 Windows Vista의 애플리케이션에서 실행 파일을 빌드하는 데 사용되는 매니페스트 파일에서 이 설정이 없는 경우 관리자가 아닌 Administrators 그룹의 구성원으로 로그온한 사용자는 이 함수가 성공하려면 관리자(RunAs 관리자)로 향상된 셸에서 애플리케이션을 실행해야 합니다.
다음 목록에서는 WSCWriteNameSpaceOrder 함수가 실패할 수 있는 시나리오에 대해 설명합니다.
- dwNumberOfEntries 매개 변수가 등록된 네임스페이스 공급자 수와 같지 않습니다.
- NSProviderId 배열에 잘못된 네임스페이스 공급자 식별자가 포함되어 있습니다.
- NSProviderId 배열에 모든 유효한 네임스페이스 공급자 식별자가 정확히 한 번 포함되어 있지는 않습니다.
- 함수는 레지스트리에 액세스할 수 없습니다(예: 사용자 권한 부족).
- 다른 프로세스(또는 스레드)가 현재 함수를 호출하고 있습니다.
요구 사항
지원되는 최소 클라이언트 | Windows 2000 Professional[데스크톱 앱만] |
지원되는 최소 서버 | Windows 2000 Server[데스크톱 앱만] |
대상 플랫폼 | Windows |
헤더 | sporder.h |
라이브러리 | Sporder.lib |
DLL | Ws2_32.dll |