구글을 뒤져보니 XP, 또는 윈도 2000용 패치가 있군요. 살펴보세요.
http://support.microsoft.com/kb/321733/ko
저 함수 만든지 오래되어서 기억이 가물가물한데...
WNetUseConnection() 을 한번이라도 호출하면, 탐색기등에서 해당 리소스에 접근할 때도 암호가 저장되던가요??
제 기억에는 플래그에 CONNECT_UPDATE_PROFILE 를 설정하지 않으면 연결정보가 현재 프로필에 적용되지 않았던 것 같은데...
테스트해보시고 WNetCancelConnection () 은 굳이 호출하지 않으셔도 괜찮을 듯 합니다.
엘레코스 님이 쓰신 글 :
: 안녕하세요?
: A컴퓨터에 암호를 건 공유폴더를 만들어 그안에 MyData.mdb화일을 두었습니다.
: B컴퓨터에서 네트웍(LAN환경)으로 MyData.mdb화일을 접근하여 데이터처리를 하고 있는데요, 종종 ‘Windows-지연된 쓰기 실패’ 라는 메시지가 오른쪽 하단, 트라이 아이콘이 위치한 곳에서 뜹니다.(OS에서 보내주는 메시지인것 같음)
:
: 사용한 API는, 암호걸린 공유폴더에 접속하기위해 WNetUseConnection를 사용하였구요, 반환을 위한 API는 WNetCancelConnection 를 이용하였습니다. 코드(오랑캐꽃 님이 제공)는 아래와 같구요.
:
: 오류메시지는 프로그램이 종료가 된 후(반환 API 호출후에)에 뜨고 있습니다. 프로그램 종료는 정상적으로 되는데 종료되자마다 정확하게 다음과 같은 메시지가 뜨고 있습니다.
:
: “Windows-지연된 쓰기 실패.. MyData.ldb에 대한 모든 데이타를 저장하지 못했습니다. 데이터가 손실되었습니다. 사용자 컴퓨터의 하드웨어 또는 네트워크 연결 오류때문에 발생했습니다.이 파일을 다른곳에 저장해 보십시오."
:
: 공유폴더에 암호를 제거하면(위의 API 사용안하면) 위의 메시지는 나오지 않는데요, 암호를 걸어서 위의 API 를 사용할때 나오고 있습니다. 윈도우XP를 사용하고 있구요, 해결할 방안이 없겠는지요?
:
:
: //암호걸린 네트웍 공유폴더에 접근하기
: function UseConnection(const aDomain, aUserID, aPassWord: String; var ConnStr: String): Boolean;
: var
: NetResource: TNetResource;
: ConnStrLen: DWORD;
: RetFlag: DWORD;
: RetValue: DWORD;
: begin
: FillChar(NetResource, SizeOf(TNetResource), 0);
: with NetResource do
: begin
: dwType := RESOURCETYPE_ANY;
: lpLocalName := nil; // 로컬 드라이브 지정하지 않음
: lpRemoteName := PChar('\\' + aDomain);
: lpProvider := nil;
: end;
: SetLength(ConnStr, MAX_PATH);
: ConnStrLen := MAX_PATH;
: RetValue:=
: WNetUseConnection(
: 0, NetResource,
: PChar(aPassWord), PChar(aUserID), CONNECT_INTERACTIVE,
: PChar(ConnStr), ConnStrLen, RetFlag
: );
: SetLength(ConnStr, StrLen(PChar(ConnStr)));
: ConnStr := '\\'+aDomain;
: Result := RetValue = 0;
: end;
:
:
: //다 사용한 권한은 WNetCancelConnection() API 로 반환
: WNetCancelConnection(PChar(ConnStr), true) ==> 이 명령을 줌과 함께 프로그램을 종료시키고 있음
: