본문 바로가기
C#

WNetUseConnection 함수의 리턴값과 오류 코드 목록

by 공부봇 2025. 1. 3.
반응형

WNetUseConnection은 Windows API의 함수로, 네트워크 리소스에 연결을 설정하는 데 사용됩니다. 이 함수는 Mpr.dll 라이브러리에 있으며, C#에서는 P/Invoke를 사용하여 호출합니다. 함수의 반환값은 성공 또는 실패를 나타내며, 실패 시 다양한 오류 코드를 반환합니다.


리턴값 목록

다음은 WNetUseConnection 함수의 주요 반환값 리스트입니다:

성공 코드

  • NO_ERROR (0)
    연결이 성공적으로 완료되었습니다.

일반 오류 코드

  • ERROR_ACCESS_DENIED (5)
    액세스 권한이 거부되었습니다.
  • ERROR_INVALID_HANDLE (6)
    잘못된 핸들이 전달되었습니다.
  • ERROR_NOT_ENOUGH_MEMORY (8)
    메모리가 부족하여 작업을 완료할 수 없습니다.
  • ERROR_BAD_NETPATH (53)
    네트워크 경로를 찾을 수 없습니다.
  • ERROR_NETWORK_ACCESS_DENIED (65)
    네트워크 액세스가 거부되었습니다.
  • ERROR_INVALID_PASSWORD (86)
    지정된 암호가 올바르지 않습니다.
  • ERROR_ALREADY_ASSIGNED (85)
    지정된 로컬 장치가 이미 연결되어 있습니다.
  • ERROR_DEVICE_ALREADY_REMEMBERED (1202)
    연결하려는 장치가 이미 기억되고 있습니다.

리소스 관련 오류

  • ERROR_NO_NET_OR_BAD_PATH (1203)
    네트워크에 연결할 수 없거나 경로가 올바르지 않습니다.
  • ERROR_SESSION_CREDENTIAL_CONFLICT (1219)
    동일한 사용자 이름과 암호를 사용하여 리소스에 이미 연결되어 있습니다.

시스템 관련 오류

  • ERROR_BAD_DEVICE (1200)
    지정된 장치가 올바르지 않습니다.
  • ERROR_CONNECTION_UNAVAIL (1201)
    네트워크 연결이 사용 불가능합니다.
  • ERROR_EXTENDED_ERROR (1208)
    네트워크 제공자에서 확장 오류가 발생했습니다. 추가 정보를 얻으려면 WNetGetLastError를 호출해야 합니다.
  • ERROR_MORE_DATA (234)
    출력 버퍼가 부족하여 모든 데이터를 저장할 수 없습니다.

사용 예제 (P/Invoke)

아래는 C#에서 WNetUseConnection을 호출하는 예제입니다.

using System;
using System.Runtime.InteropServices;

class Program
{
    [DllImport("mpr.dll", CharSet = CharSet.Auto)]
    public static extern int WNetUseConnection(
        IntPtr hwndOwner,
        ref NETRESOURCE lpNetResource,
        string lpPassword,
        string lpUsername,
        uint dwFlags,
        string lpAccessName,
        ref uint lpBufferSize,
        out uint lpResult
    );

    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
    public struct NETRESOURCE
    {
        public uint dwScope;
        public uint dwType;
        public uint dwDisplayType;
        public uint dwUsage;
        public string lpLocalName;
        public string lpRemoteName;
        public string lpComment;
        public string lpProvider;
    }

    static void Main()
    {
        var netResource = new NETRESOURCE
        {
            dwType = 1, // RESOURCETYPE_DISK
            lpLocalName = "Z:",
            lpRemoteName = @"\\Server\Share"
        };

        uint bufferSize = 0;
        uint resultFlags;
        int result = WNetUseConnection(IntPtr.Zero, ref netResource, "password", "username", 0, null, ref bufferSize, out resultFlags);

        if (result == 0) // NO_ERROR
        {
            Console.WriteLine("Connected successfully.");
        }
        else
        {
            Console.WriteLine($"Error connecting: {result}");
        }
    }
}

참고

  • 자세한 반환값과 코드에 대한 설명은 Microsoft 공식 문서에서 확인할 수 있습니다:
    WNetUseConnection 함수 - Microsoft Docs
  • 반환값을 디버깅할 때는 오류 코드와 의미를 매핑하여 해석하면 유용합니다.
반응형