0

ファイルをネットワーク ドライブにコピーしたいのですが、次のエラーが表示されます: C:\pdf.zip has denide (copytonetworkingdrive function)。そこで、ファイルの ACL を変更したい (copyfileto 関数)。

問題

1.) c:\pdf.zip にアクセスできません

2.) ファイル c:\ をネットワーク ドライブにコピーできません。

3.) ファイルのアクセス制御を変更できません。

4.) \\networkingdrive\\blablabla$ にアクセスできません

(プログラミングを介してユーザーがログインしています[logonuser関数を見てください])

Windows 7 64 ビット、VS C# 2012、.Net Framework 4.0 で開発しています。

using Ionic.Zip;
using System.Security.Principal;
using System.Security.Permissions;
using System.Security.AccessControl;
using System.Management;
using System.Runtime.ConstrainedExecution;
using System.Runtime.InteropServices;
using Microsoft.Win32.SafeHandles;

私のコード:

private static void copyfileto(string fin, string fout)
{
       int i;
       FileStream fsin, fsout;
       *FileSecurity files = File.GetAccessControl(fin);*
       WindowsIdentity self = System.Security.Principal.WindowsIdentity.GetCurrent();
       FileSystemAccessRule rule = new FileSystemAccessRule( self.Name, FileSystemRights.FullControl,AccessControlType.Allow);

       AuthorizationRuleCollection acl = files.GetAccessRules(true,true, typeof(System.Security.Principal.NTAccount));
       files.AddAccessRule( rule );

       fsin = new FileStream( fin ,FileMode.Open);
       fsout = new FileStream( fout ,FileMode.Create);

       do 
       { i = fsin.ReadByte() ;
         if ( i != -1 ) fsout.WriteByte((byte) i );
       } while ( i != -1);

       fsin.Close();
       fsout.Close();

}



 private void copytonetworkdrive()
   {
      AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
      IntPtr hTokenLocal;
      if (LogonUser(frm_main.myapp.gl_login_user_for_attachment.ToString(),
          frm_main.myapp.gl_folder_attachment_server.ToString(),
          frm_main.myapp.gl_pass_user_for_attachment.ToString(), LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_DEFAULT, out hTokenLocal))
      {

         //if (hToken != IntPtr.Zero) CloseHandle(hToken);
         //if (hTokenDuplicate != IntPtr.Zero) CloseHandle(hTokenDuplicate);
         WindowsIdentity identity = new WindowsIdentity(hTokenLocal);
         WindowsImpersonationContext context = identity.Impersonate();

         copyfileto("C:\\Pdf.zip",frm_main.myapp.gl_folder_attachment_server.ToString() +@"ZIP\quotation\Pdf.zip");
      }
   }

FileSecurityファイル内 = File.GetAccessControl(fin); エラー :

System.UnauthorizedAccessException was unhandled
  HResult=-2147024891
  Message=Attempted to perform an unauthorized operation.
  Source=mscorlib
  StackTrace:
       at System.Security.AccessControl.Win32.GetSecurityInfo(ResourceType resourceType, String name, SafeHandle handle, AccessControlSections accessControlSections, RawSecurityDescriptor& resultSd)
       at System.Security.AccessControl.NativeObjectSecurity.CreateInternal(ResourceType resourceType, Boolean isContainer, String name, SafeHandle handle, AccessControlSections includeSections, Boolean createByName, ExceptionFromErrorCode exceptionFromErrorCode, Object exceptionContext)
       at System.Security.AccessControl.FileSystemSecurity..ctor(Boolean isContainer, String name, AccessControlSections includeSections, Boolean isDirectory)
      ...

助けて感謝してください。

4

0 に答える 0