Background: Ho una domanda che deve leggere i file su un'unità di rete (Z :)Accesso a un file su un'unità di rete
Questa grande opera nel mio dominio ufficio, ma non funziona su sito (in un dominio diverso). Per quanto posso dire, gli utenti del dominio e le unità di rete sono impostati allo stesso modo, tuttavia non ho accesso agli utenti ecc. Nel dominio dei clienti.
Quando non sono riuscito ad accedere all'unità di rete, ho pensato di aver bisogno di un token per un utente. Questo è come mi impersionate l'utente:
[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();
}
Ora qui è la parte interessante/strano. Nella mia rete l'applicazione può già accedere all'unità di rete e, se provo a impersonare l'utente attivo (esattamente lo stesso utente, incluso lo stesso dominio), non sarà in grado di accedere all'unità di rete.
Questo mi lascia impotente poiché ora non ho idea di cosa funzioni e cosa no e, cosa più importante, funzionerà sul sito?
Cosa mi manca?
EDIT: Ho dimenticato di scrivere questo mentre inizialmente ponevo la domanda: ho provato ad inserire un nome di dominio valido e non ha funzionato, quindi dopo ho provato ad inserire null per ottenere lo stesso nome utente che vorrei senza questo codice (poiché funziona di default nel nostro dominio). Questo non ha aiutato, ed è così che domain = null; finito in questa domanda.
Scommetto che i ragazzi di Superuser discutono il contrario (poiché questo ha il codice). – Codesleuth
Perché non si concede all'account che esegue questo codice l'accesso in lettura all'unità? Quindi il tuo codice diventa questo: 'File.ReadAllBytes (filePath);' – ChaosPandion
Ho fatto una domanda simile una volta; potresti trovarlo utile: http://stackoverflow.com/questions/659013/accessing-a-shared-file-unc-from-a-remote-non-trusted-domain-with-credentials – Randolpho