zoukankan      html  css  js  c++  java
  • 目录访问共享C#怎么访问共享目录

    本文是一篇关于目录访问共享的帖子

        用C#访问共享目录老是涌现权限问题,让人很头疼,研究了良久找到一种方法,贴上代码:

    public class IdentityScope : IDisposable  
        {    
            // obtains user token     
            [DllImport("advapi32.dll", SetLastError = true)]    
            static extern bool LogonUser(string pszUsername, string pszDomain, string pszPassword,    
                int dwLogonType, int dwLogonProvider, ref IntPtr phToken);    
        
            // closes open handes returned by LogonUser     
            [DllImport("kernel32.dll", CharSet = CharSet.Auto)]    
            extern static bool CloseHandle(IntPtr handle);    
        
            [DllImport("Advapi32.DLL")]    
            static extern bool ImpersonateLoggedOnUser(IntPtr hToken);    
        
            [DllImport("Advapi32.DLL")]    
            static extern bool RevertToSelf();    
            const int LOGON32_PROVIDER_DEFAULT = 0;    
            const int LOGON32_LOGON_NEWCREDENTIALS = 9;//域控中的需要用:Interactive = 2     
            private bool disposed;    
            public IdentityScope(string sUsername,string sPassword, string sDomain)    
            {    
                // initialize tokens     
                IntPtr pExistingTokenHandle = new IntPtr(0);    
                IntPtr pDuplicateTokenHandle = new IntPtr(0);    
        
                try    
                {    
                    // get handle to token     
                    bool bImpersonated = LogonUser(sUsername, sDomain, sPassword,    
                        LOGON32_LOGON_NEWCREDENTIALS, LOGON32_PROVIDER_DEFAULT, ref pExistingTokenHandle);    
        
                    if (true == bImpersonated)    
                    {    
                        if (!ImpersonateLoggedOnUser(pExistingTokenHandle))    
                        {    
                            int nErrorCode = Marshal.GetLastWin32Error();    
                            throw new Exception("ImpersonateLoggedOnUser error;Code=" + nErrorCode);    
                        }    
                    }    
                    else    
                    {    
                        int nErrorCode = Marshal.GetLastWin32Error();    
                        throw new Exception("LogonUser error;Code=" + nErrorCode);    
                    }    
                }    
                finally    
                {    
                    // close handle(s)     
                    if (pExistingTokenHandle != IntPtr.Zero)    
                        CloseHandle(pExistingTokenHandle);    
                    if (pDuplicateTokenHandle != IntPtr.Zero)    
                        CloseHandle(pDuplicateTokenHandle);    
                }    
            }    
        
            protected virtual void Dispose(bool disposing)    
            {    
                if (!disposed)    
                {    
                    RevertToSelf();    
                    disposed = true;    
                }    
            }    
        
            public void Dispose()    
            {    
                Dispose(true);    
            }    
        }
        每日一道理
    冰心说道:“爱在左,同情在右,走在生命的两旁,随时撒种,随时开花,将这一径长途,点缀得香花弥漫,使穿枝拂叶的行人,踏着荆棘,不觉得痛苦,有泪可落,却不是悲凉。”

        
    通过IdentityScope传入目标机器的IP,用户名和密码就能够访问到共享目录了。

        如何使用如下:

    using (IdentityScope iss = new IdentityScope(targetLoginName, targetPassword,targetIP))
     {
               //你的代码        
     }

        
     

    文章结束给大家分享下程序员的一些笑话语录: 某程序员对书法十分感兴趣,退休后决定在这方面有所建树。花重金购买了上等的文房四宝。一日突生雅兴,一番磨墨拟纸,并点上了上好的檀香,颇有王羲之风 范,又具颜真卿气势,定神片刻,泼墨挥毫,郑重地写下一行字:hello world.

    --------------------------------- 原创文章 By
    目录和访问共享
    ---------------------------------

  • 相关阅读:
    函数介绍
    Php数组
    数据类型的转换
    Php 输出语句
    php运算符
    php变量
    Php 魔术常量
    HDU 2487 Ugly Windows(暴力)(2008 Asia Regional Beijing)
    codeforces 319B Psychos in a Line(模拟)
    codeforces 301D Yaroslav and Divisors(树状数组)
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3097607.html
Copyright © 2011-2022 走看看