2014-07-11 1 views
0

다음 코드를 사용하여 세 번째 사용자로 가장하여 폴더에 액세스하려고합니다.C#에서 가장하여 FolderDialog를 사용하는 네트워크 폴더 열기

Boolean success = LogonUser("username", "domain", "password", 2, 0, out userToken); 

if (success) 
{ 
    var wi = new WindowsIdentity(userToken, "WindowsAuthentication"); 
    using (wi.Impersonate()) 
     { 
     if (fbdPatches.ShowDialog() == DialogResult.OK) 
     { 
       // try to access folder which can be accessed only through above credentials 
     } 
     } 
} 

여전히 폴더에 액세스 할 수 없습니다. 제가 여기서 잘못된 일을하고 있는지 알아 보도록 도와주세요.

+0

. "루트 폴더를 검색 할 수 없습니다." 실제로 folderBrowseDialog (fbdPatches) 루트 폴더를 설정하려고합니다. fbdPatches.SelectedPath = "SomeFolder"; – Adinarayana

+0

당신은'LOGON32_LOGON_NEW_CREDENTIALS 9'을 시도 했습니까? – Kiquenet

+0

질문을 편집하고 추가 정보를 추가 할 수 있습니다. '다음 오류가 있습니다. "루트 폴더를 검색 할 수 없습니다."실제로 folderBrowseDialog (fbdPatches) 루트 폴더를 설정하려고합니다. fbdPatches.SelectedPath = "SomeFolder" – Kiquenet

답변

0

LogonUser은 사용자 이름, 도메인 및 암호를 사용하고 WindowsIdentity에서 사용할 수있는 토큰을 반환합니다. 이러한 매개 변수 외에도 LogonUser는 사용할 로그온 공급자 (대부분 기본값으로 충분 함) 및 로그온 유형을 알고 싶어합니다. 로그온 유형을 선택하는 것은 까다로울 수 있으므로 옵션은

로그온 유형() WINBASE.H 가입일 LOGON32_LOGON_xxx)정수 값

LOGON32_LOGON_BATCH 4

LOGON32_LOGON_INTERACTIVE 2

012,351 6,

LOGON32_LOGON_NETWORK 3

LOGON32_LOGON_NETWORK_CLEARTEXT 8

LOGON32_LOGON_NEW_CREDENTIALS 9

LOGON32_LOGON_SERVICE 5

귀하의 문제는 로그온 NEW_CREDENTIALS 옵션을 사용하여 해결된다. 예를 들어

: 나는 오류 다음있어

Boolean success = LogonUser("username", "domain", "password", 9, 0, out userToken); 

또는

Boolean success = LogonUser("username", "domain", "password", LOGON32_LOGON_NEW_CREDENTIALS, 0, out userToken);