Gdy używam funkcji LogonUser, aby się zalogować na udostępniony folder na innym komputerze w sieci lokalnej to mogę z tego folderu kopiować pliki (chodzi o pliki .avi), ale nie mogę sprawić, aby mój program oddtwarzał te pliki poprzez sieć. Dlaczego? Kiedy klikam przycisk "Play" nic się nie dzieje, ani błędu ani nic?
Chodzi o to, aby uniemożliwić kopiowanie tych filmów.
Poniżej kod:
public partial class MainWindow : Window
{
DispatcherTimer timer;
SoddingNetworkAuth SNA;
public MainWindow()
{
InitializeComponent();
timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromMilliseconds(500);
timer.Tick += new EventHandler(timer_Tick);
}
void timer_Tick(object sender, EventArgs e)
{
slider1.Value = mediaElement1.Position.TotalSeconds;
}
private void button1_Click(object sender, RoutedEventArgs e)
{
string[] files;
bool bJestDostep = true;
SNA = new SoddingNetworkAuth(@"admin", @"kp", @"asd21247");
try
{
files = Directory.GetFiles(@"\\kp\Instalki\Lekcje");
}
catch
{
bJestDostep = false;
}
if (bJestDostep)
{
string strNazwaPliku = ((ListBoxItem)listBox1.SelectedValue).Content.ToString();
mediaElement1.Source = new Uri(@"\\kp\Instalki\Lekcje\" + strNazwaPliku + ".avi", UriKind.Absolute);
mediaElement1.LoadedBehavior = MediaState.Manual;
mediaElement1.UnloadedBehavior = MediaState.Manual;
mediaElement1.Play();
}
}
//Play button
private void button2_Click(object sender, RoutedEventArgs e)
{
mediaElement1.Play();
}
private void slider1_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
mediaElement1.Position = TimeSpan.FromSeconds(slider1.Value);
}
private void mediaElement1_MediaOpened(object sender, RoutedEventArgs e)
{
TimeSpan ts = mediaElement1.NaturalDuration.TimeSpan;
slider1.Maximum = ts.TotalSeconds;
timer.Start();
}
private void button3_Click(object sender, RoutedEventArgs e)
{
SNA.Dispose();
mediaElement1.Pause();
}
}
public class SoddingNetworkAuth
{
[DllImport("advapi32.dll", SetLastError=true)]
private static extern bool LogonUser(string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, out IntPtr phToken);
[DllImport("kernel32", SetLastError = true )]
private static extern bool CloseHandle(IntPtr hObject);
private IntPtr userHandle = IntPtr.Zero;
private WindowsImpersonationContext impersonationContext;
//konstruktor
public SoddingNetworkAuth(string user, string domain, string password)
{
if ( !string.IsNullOrEmpty( user ) )
{
// Call LogonUser to get a token for the user
bool loggedOn = LogonUser( user, domain, password,
9 /*(int)LogonType.LOGON32_LOGON_NEW_CREDENTIALS*/,
0 /*(int)LogonProvider.LOGON32_PROVIDER_WINNT50*/,
out userHandle );
if ( !loggedOn )
throw new Win32Exception( Marshal.GetLastWin32Error() );
// Begin impersonating the user
impersonationContext = WindowsIdentity.Impersonate( userHandle );
}
}
public void Dispose()
{
if (userHandle != IntPtr.Zero)
CloseHandle(userHandle);
if ( impersonationContext != null )
impersonationContext.Undo();
}
}