배경 : 내가 (Z : 네트워크 드라이브에있는 파일에서네트워크 드라이브에있는 파일에 액세스하면
이 내 사무실 도메인의 위대한 작품을 읽을 수있는 응용 프로그램을 가지고, 그러나 그것은 작동하지 않습니다 사이트 (다른 도메인에 있음). 멀리 나는 도메인 사용자와 네트워크 드라이브가 동일한 방식으로 설정되어 있다고 말할 수 있지만 고객 도메인의 사용자 등은 액세스 할 수 없습니다.
네트워크 드라이브에 액세스 할 수 없을 때 사용자 토큰이 필요하다고 생각했습니다.
[DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
public static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);
... 지금 여기
const string userName = "USER";
const string pass = "PASS";
const string domainName = "VALIDDOMAIN.local" //tried with valid domain name and with null, same result
const int LOGON32_PROVIDER_DEFAULT = 0;
const int LOGON32_LOGON_INTERACTIVE = 2;
IntPtr tokenHandle = new IntPtr(0);
bool returnValue = LogonUser(userName, domainName, pass,
LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT,
ref tokenHandle);
if (!returnValue)
throw new Exception("Logon failed.");
WindowsImpersonationContext impersonatedUser = null;
try
{
WindowsIdentity wid = new WindowsIdentity(tokenHandle);
impersonatedUser = wid.Impersonate();
}
finally
{
if (impersonatedUser != null) impersonatedUser.Undo();
}
이 재미있는/이상한 부분이 내가 사용자를 impersionate 방법이다. 내 네트워크에서 응용 프로그램은 이미 네트워크 드라이브에 액세스 할 수 있으며, 활성 사용자 (동일한 도메인을 포함하여 정확히 동일한 사용자)로 가장하면 네트워크 드라이브에 액세스 할 수 없습니다. 내가 아무 생각이 어떻게 작동하고 무엇을,이 사이트에서 작동하지, 그리고 점에 더 않는이없는 지금부터
이 나를 무기력 잎?
무엇이 누락 되었습니까?
편집 : 나는 없이는처럼 그 후 나는 같은 사용자 이름을 사용하려면 null을 입력 시도 그래서, 나는 유효한 도메인 이름을 입력 시도하고 작동하지 않았다 :이 동안 원래 질문을 쓰는 것을 잊었 이 코드는 (우리 도메인에서 기본적으로 작동하기 때문에) 이것은 도움이되지 않았고 domain = null 인 방법입니다. 이 질문에 결국.
저는 수퍼 유저들 (이 코드가 있기 때문에) 역전을 주장 할 것입니다. – Codesleuth
이 코드를 실행하는 계정에 드라이브에 대한 읽기 권한을 부여하지 않는 이유는 무엇입니까? 그러면 코드가 다음과 같이됩니다 :'File.ReadAllBytes (filePath); ' – ChaosPandion
나는 비슷한 질문을 한 번했습니다. 당신은 유용 할 수 있습니다 : http://stackoverflow.com/questions/659013/accessing-a-shared-file-unc-from-a-remote-non-trusted-domain-with-credentials – Randolpho