반응형
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 - 반환값을 디버깅할 때는 오류 코드와 의미를 매핑하여 해석하면 유용합니다.
반응형
'C#' 카테고리의 다른 글
재미로 만드는 로또 번호 생성기 #2_로또 API를 이용해서 당첨 번호 조회하기. (4) | 2025.01.05 |
---|---|
재미로 만드는 로또 번호 생성기 #1_중복 없는 번호 생성 (1) | 2025.01.04 |
C#의 Garbage Collection (GC) 개념 (5) | 2025.01.03 |
C#로 특정 폴더 내 파일 이름 변경 (1) | 2025.01.03 |
C#에서 WORD, DWORD와 비트 연산을 처리하는 방법 (0) | 2024.12.31 |
C# ThreadPool: 스레드 관리와 작업 처리 최적화 (1) | 2024.12.30 |
로컬 IP 127.0.0.1의 기본 포트 확인 및 설정 방법 (0) | 2024.12.30 |
C# Thread.Priority 속성 (1) | 2024.12.27 |