다음을 통해 공유


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)를 반환합니다. 그렇지 않으면 특정 오류 코드를 반환합니다.

오류 코드 의미
WSAEFAULT
NSProviderId 배열은 프로세스 주소 공간 내에 완전히 포함되지 않습니다.
WSAEINVAL
하나 이상의 인수가 입력 매개 변수가 잘못되었으며 아무 작업도 수행되지 않았습니다.
WSANO_RECOVERY
복구할 수 없는 오류가 발생했습니다. 이 오류는 다음과 같은 여러 조건에서 반환됩니다. 사용자가 Winsock 레지스트리에 쓰는 데 필요한 관리 권한이 없거나 다른 애플리케이션이 현재 네임스페이스 공급자 카탈로그에 쓰고 있습니다.
WSASYSCALLFAILURE
실패하지 않아야 하는 시스템 호출이 실패했습니다.
WSATRY_AGAIN
함수는 다른 스레드 또는 프로세스에 의해 호출됩니다.
WSA_NOT_ENOUGH_MEMORY
작업을 수행할 수 있는 메모리가 부족했습니다.
(기타)
함수는 레지스트리 오류 코드를 반환할 수 있습니다.

설명

네임스페이스 공급자는 WSCInstallNameSpace 함수를 사용하여 설치됩니다. 네임스페이스 공급자가 처음 설치되는 순서는 WSAEnumNameSpaceProviders를 통해 열거되는 기본 순서를 제어합니다. 더 중요한 것은 이 순서는 클라이언트가 이름 확인을 요청할 때 네임스페이스 공급자가 고려되는 순서도 제어합니다. WSCWriteNameSpaceOrder 함수를 사용하여 네임스페이스 공급자의 순서를 변경할 수 있습니다. 64비트 플랫폼에서는 64비트 프로세스가 32비트 네임스페이스 공급자 카탈로그에서 네임스페이스 공급자의 순서를 변경할 수 있도록 WSCWriteNameSpaceOrder32 함수가 제공됩니다. 64비트 플랫폼에서 네임스페이스 공급자는 WSCInstallNameSpace32 함수를 사용하여 32비트 네임스페이스 공급자 카탈로그에 설치됩니다.

현재 네임스페이스 공급자 카탈로그는 레지스트리 키 아래의 레지스트리에 저장됩니다. HKEY_LOCAL_MACHINE\SYSTEM\Current Control Set\Services\Winsock2\Parameters\NameSpace_Catalog5

이름 확인에 대한 클라이언트 요청은 WSALookupServiceBegin, WSALookupServiceNextWSALookupServiceEnd 루틴을 사용합니다. 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 그룹의 구성원으로 로그온한 사용자가 실행하는 경우 애플리케이션이 요청된ExecutionLevelrequireAdministrator로 설정된 매니페스트 파일에 표시되지 않는 한 이 호출은 실패합니다. 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

추가 정보

WSAEnumNameSpaceProviders

WSANAMESPACE_INFO

WSAQUERYSET

WSCEnumNameSpaceProviders32

WSCInstallNameSpace

WSCInstallNameSpace32

WSCWriteNameSpaceOrder32