Author Topic: LogonUser and mediaelement  (Read 1450 times)

0 Members and 1 Guest are viewing this topic.

dawido000

  • Guest
LogonUser and mediaelement
« on: September 07, 2014, 02:03:00 AM »
When I use Logonuser function to log on share folder in another computer in local network, I can copy .avi file from this folder, but I can not to make it play in mediaElement. Why? Nothing is happening, there is no any communicate.

Below my code:
Code: [Select]
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(); 
        } 
    }