Solved

C# - Impersonate Context Question

Posted on 2009-05-04
1
804 Views
Last Modified: 2012-05-06
I have a console application where I have to use impersonate to access a network directory.  I then have code that loops though all the files in a directory on that network server.  After a few minutes sometimes not all it throws a System.IO.Exception - the specified network path is no longer available.  Any idea if this is possibly a impersonate issue and what I can change?  Below is the code in an impersonate.cs class I have that I call first before running the code and here is the exact stack trace:

at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)\r\n   at System.IO.Directory.InternalGetFileDirectoryNames(String path, String userPathOriginal, String searchPattern, Boolean includeFiles, Boolean includeDirs, SearchOption searchOption)\r\n   at System.IO.DirectoryInfo.GetFiles(String searchPattern, SearchOption searchOption)\r\n   at System.IO.DirectoryInfo.GetFiles(String searchPattern)\r\n   at BillRunPowerCleanup.Proram.CleanupMacOldPDFs() in C:\\Applications\\BillRunPower\\BillRunPowerCleanup\\BillRunPowerCleanup\\Program.cs:line 56"
public class Impersonator

    {

        public WindowsImpersonationContext impersonationContext;

        

        [DllImport("advapi32.dll")]

        public static extern int LogonUser(String lpszUsername, String lpszDomain,

        String lpszPassword,

        int dwLogonType, int dwLogonProvider, ref IntPtr phToken);
 

        [DllImport("kernel32.dll")]

        public extern static bool CloseHandle(IntPtr hToken);
 

        public bool Impersonate(string userName, string domain, string password)

        {

        WindowsIdentity tempWindowsIdentity;

        IntPtr token = IntPtr.Zero;

        IntPtr tokenDuplicate = IntPtr.Zero;

        // request default security provider a logon token with LOGON32_LOGON_NEW_CREDENTIALS

        // token returned is impersonation token, no need to duplicate

        if(LogonUser(userName, domain, password, 9, 0, ref token) != 0)

        {

        tempWindowsIdentity = new WindowsIdentity(token);

        impersonationContext = tempWindowsIdentity.Impersonate();

        // close impersonation token, no longer needed

        CloseHandle(token);

        if (impersonationContext != null)

        return true;

        }

        return false; // Failed to impersonate.

        }
 

    }

Open in new window

0
Comment
Question by:sbornstein2
1 Comment
 
LVL 13

Accepted Solution

by:
kaylanreilor earned 500 total points
Comment Utility
I don't see the connection with an impersonation issue. The impersonation will help to be allowed to access the shared folder.
To test it you should remove the impersonation code a set a permission on the folder to everyone. Thus I guess you will experience the same problem.
0

Featured Post

Maximize Your Threat Intelligence Reporting

Reporting is one of the most important and least talked about aspects of a world-class threat intelligence program. Here’s how to do it right.

Join & Write a Comment

Suggested Solutions

Article by: Najam
Having new technologies does not mean they will completely replace old components.  Recently I had to create WCF that will be called by VB6 component.  Here I will describe what steps one should follow while doing so, please feel free to post any qu…
Exception Handling is in the core of any application that is able to dignify its name. In this article, I'll guide you through the process of writing a DRY (Don't Repeat Yourself) Exception Handling mechanism, using Aspect Oriented Programming.
When you create an app prototype with Adobe XD, you can insert system screens -- sharing or Control Center, for example -- with just a few clicks. This video shows you how. You can take the full course on Experts Exchange at http://bit.ly/XDcourse.
You have products, that come in variants and want to set different prices for them? Watch this micro tutorial that describes how to configure prices for Magento super attributes. Assigning simple products to configurable: We assigned simple products…

762 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

7 Experts available now in Live!

Get 1:1 Help Now