서영재 님이 쓰신 글 :
: 일단 소스입니다.
:
: NETRESOURCE NetRes;
: NetRes.dwType=RESOURCETYPE_DISK;
: NetRes.dwDisplayType = RESOURCEDISPLAYTYPE_GENERIC;
: NetRes.dwUsage = RESOURCEUSAGE_CONNECTABLE;
: NetRes.lpLocalName="z:";
: NetRes.lpRemoteName="\\\\myth0312\\영어인터뷰";
: NetRes.lpProvider=NULL;
: DWORD Result=WNetAddConnection2(&NetRes,"","",CONNECT_UPDATE_PROFILE);
: if(Result==NO_ERROR)
: ShowMessage("OK");
: else ShowMessage("NG");
:
: 여기서 자꾸 NG만출력되네요
:
: "myth0312" 란컴퓨터는 제컴퓨터이고, "영어인터뷰"라는 폴더를 공유해놨습니다.
: 인터넷뒤져보니 lpLocalName을 다른 드라이브로 해놓은것들도 있던데 그렇게 해도 안되네요.
:
: 옵션값을 설정해줘야하나요???
:
:
답변:
공유하는 PC들 간의 OS 버전 , SMB 프로토콜 버전, API 리턴 값 등을 구체적으로 적어놓아야 답변이 가능하죠.
WNetAddConnection2() API를 사용할 때...
파라미터 lpPassword와 lpUsername가 empty string인 ""이냐, 아니면 NULL 이냐에 따라 의미가 다릅니다.
디폴트 credential 로 디렉토리를 공유해 놓았으면...
아래와 같이 NULL 값을 주어야 합니다.
// unicode 버전.
NETRESOURCEW nres;
memset(&nres, 0, sizeof(nres));
nres.dwType = RESOURCETYPE_ANY;
nres.lpLocalName = (LPWSTR)L"Z:";
nres.lpRemoteName = (LPWSTR)L"\\\\localhost\\test";
DWORD Flags = CONNECT_TEMPORARY;
DWORD RetVal = WNetAddConnection2W(&nres, NULL, NULL, Flags);
if (RetVal != NO_ERROR)
wprintf(L"WNetAddConnection2 failed with error: %u\n", RetVal);
Flags 파라미터를 CONNECT_UPDATE_PROFILE로 사용하면 시스템 리부팅해서 다시 로긴 할 때 마다
네트웍 드라이브가 생성되므로, 임시로 현재 세션 중에만 공유 드라이브를 사용할 때는 CONNECT_TEMPORARY로 사용.