Windows Programming ʿմϴ

   ȸ 5047   õ 0    

일전에 포스팅한 랜섬웨어에의한 파일손상예방이 가능한 백업서비스를 준비하고 있습니다.

http://2cpu.co.kr/freeboard_2011/984605

관련 SW를 개발하다가 난관에 부디처 도움을 요청합니다.  

괜히 시작한것 같아 불안합니다.  내년부턴 돈되는일 해야하는데...


1. Restore 프로그램을 C#으로 만드는데 UI Layout이 망가집니다.

Windows 7 영문, Win8, Win10, WinServer 2012, WinServer2016에서는 이렇게 나오는데

Windows7한글에서만 이렇게 나옵니다.

설치된 .NET은 모두 4.7입니다.

왜이럴까요?  

참고로 태어나서 GUI는 첨 만들어 봤는데 신세계입니다.


2. Windows 백업을 하는데 readdirectorychangesw API를 사용합니다.

그런데 https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-readdirectorychangesw 를 보면

readdirectorychangesw가 SMB3을 지원하고 SMB2에대한 언급이 없습니다.  이경우 대게는 지원하지 않는경우인데 지원하는것 처럼 보입니다.

그냥 지원한다고 믿고 사용해도 될까요?  Windows7에서는 SMB3를 지원하지 않아서 만약 readdirectorychangesw가 SMB2를 지원하지 않으면 문제가 생깁니다.


3. 백업 Agent를 WindowsService로 만들려고 하는데 초기 시작할때 특정 DRIVE가 NetworkDrive인지를 확인해야 합니다.

그래서 GetDriveTypeA라는 API를 사용하는데 이 API가 WindowsService에서 NetworkDrive를 만나면 에러가 발생합니다.

대충 보니까 Service는 "Local System", "Local Service", "Network Service"로 작동이 되는데 NetworkDrive는 다른 Credential로 연결을 합니다.

이경우 Service에서 사용하는 사용자 credential로는 NetworkDrive에 대한 정보를 가저오지 못하는것 같습니다.

혹시 해결하는 방법 아시는분 계신가요?

참고로 Windows에서 프로그램 첨 만들어 봅니다.  여기도 신세계입니다.

OSX는 마무리 했는데 Windows가 발목을 잡네요...


ª ϼ ϰ.
Ȳ 2018-12
۲ ε մϴ.
     
epowergate 2018-12
׷ Win7-K ٸٴ°ǵ 𸣰ڳ׿. 
ãƺ ϰڽϴ.
մϴ.
2 2018-12
1.
ϸ Ʈ OS/ ̳ ֽϴ.
AutoScaleMode ٸ Ӽ Ͽñ..
α׷ Main Լ
ֻܿ using System.Reflection;
Application.SetCompatibleTextRenderingDefault(false); ٿ
typeof(Control).GetField("defaultFont", BindingFlags.Static | BindingFlags.NonPublic).SetValue(null, new System.Drawing.Font("gulim", 9.0F));
غø Ʈѷ ⺻Ʈ ˴ϴ.


3. 񽺿 ̵ 쿡 ȯ濡 Ʈũ ̺ ʾ Ұմϴ.
󿡼 SYSTEM Ͻ÷ \\SMBȣƮ\Share Ͽ WNetUseConnection API Ͽ óϽðų,
ش 񽺼ǿø Log On κп Ư ڷ 񽺷 ۵ǰԲ մϴ.
     
2 2018-12
3. Ʈũ ̺꿡 ϴ ۸ غҽϴ. ó NAS SMB θ ׽Ʈغҽϴ.
Ʈũ ̺ ҴȰ ̺꿡 ã ƴ Ʈũη ٷ ϴ Դϴ.

* ߰ δ SYSTEMڷ ÿ User interfactive αεǾִ ڷ AppDomain Impersonateϴ Context ۼؼ Ʈũ ̺ ϱ⵵ մϴ. ( Session token Ͽ ϱ ̵/йȣ ʿմϴ)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ComponentModel;
using System.Runtime.InteropServices;
using System.Net;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {

            using(new NetworkConnection(@"\\nas.dc.local", new NetworkCredential("̵", "йȣ")))
            {
                Console.WriteLine("==== Files ====");
                foreach(string entry in System.IO.Directory.GetFiles(@"\\nas.dc.local\Downloads"))
                {
                    Console.WriteLine(entry);
                }

            }

            Console.ReadLine();

        }


        public class NetworkConnection : IDisposable
        {

            string _networkName;

            public NetworkConnection(string networkName,
                NetworkCredential credentials)
            {
                this._networkName = networkName;

                NetResource netResource = new NetResource()
                {
                    Scope = ResourceScope.GlobalNetwork,
                    ResourceType = ResourceType.Disk,
                    DisplayType = ResourceDisplaytype.Share,
                    RemoteName = networkName
                };

                string userName = string.IsNullOrEmpty(credentials.Domain) ? credentials.UserName : string.Format(@"{0}\{1}", credentials.Domain, credentials.UserName);

                int result = WNetAddConnection2(netResource, credentials.Password, userName, 0);

                if (result != 0)
                {
                    throw new Win32Exception(result);
                }
            }

            ~NetworkConnection()
            {
                Dispose(false);
            }

            public void Dispose()
            {
                Dispose(true);
                GC.SuppressFinalize(this);
            }

            protected virtual void Dispose(bool disposing)
            {
                WNetCancelConnection2(_networkName, 0, true);
            }

            [DllImport("mpr.dll")]
            private static extern int WNetAddConnection2(NetResource netResource,
                string password, string username, int flags);

            [DllImport("mpr.dll")]
            private static extern int WNetCancelConnection2(string name, int flags,
                bool force);
        }

        [StructLayout(LayoutKind.Sequential)]
        public class NetResource
        {
            public ResourceScope Scope;
            public ResourceType ResourceType;
            public ResourceDisplaytype DisplayType;
            public int Usage;
            public string LocalName;
            public string RemoteName;
            public string Comment;
            public string Provider;
        }

        public enum ResourceScope : int
        {
            Connected = 1,
            GlobalNetwork,
            Remembered,
            Recent,
            Context
        };

        public enum ResourceType : int
        {
            Any = 0,
            Disk = 1,
            Print = 2,
            Reserved = 8,
        }

        public enum ResourceDisplaytype : int
        {
            Generic = 0x0,
            Domain = 0x01,
            Server = 0x02,
            Share = 0x03,
            File = 0x04,
            Group = 0x05,
            Network = 0x06,
            Root = 0x07,
            Shareadmin = 0x08,
            Directory = 0x09,
            Tree = 0x0a,
            Ndscontainer = 0x0b
        }

    }
}
     
epowergate 2018-12
3. Ͻô 並 غ ߴµ ̷ Admin User ؾմϴ.
׷ Install ڰ Admin ID/PASSWD ־ ϴµ 쿡 ڰ ־ Դϴ.

Admin ִ
  1. ̰ 츮 ޾ƾ ϴµ ̽ ޱⰡ մϴ. ڰ 츮 ϰ ٱ غ ߽ϴ.
Admin
  1: Network Drive Login
  2: AD ؼ Network Drive ٺҰ
׷ Դϴ.


ٸ ִµ Network Drive UNC ƴ Letter Drive Ǿ 񽺿 忡 Ұϴٰ ϳ׿.
ֽ غ ߴµ ش Network Drive Application ˼ ϴ.
ڿ ϴµ ׷ ǰ ڰ ־ Դϴ.
          
2 2018-12
ڿ ִ Ȳ ƴ϶ Ϲ 񽺸忡 ڰ Ʈũ ̺ Ϲ δ å ϴ.
Ѱ ɼ ִٸ 帰 ߿ 񽺸 ¿ ڰ αεǾִٸ explorer.exe μ session token ͼ ū Ͽ ϴ Դϴ.
α Ǿִ ڿ ū Ͽ ⶧ ڿ Է¹ ʿ ϴ.
ۿ c# service user Impersonate ˻غø ҽ ɴϴ..
ַ ϸ鼭, 񽺸 ۵Ǿ ͹̳μ /ȭ ϸ鼭 ߴ Դϴ.
Ͻô α׷ ȯ 𸣴ٺ, ̺κ ´ 𸣰ڳ׿
               
epowergate 2018-12
user Impersonate ʵǴ° Ȯ߽ϴ.
뷫 ϱ ڴ ȹ̾ Ϸ մϴ.
߿ ð ٽ ְڽϴ.
մϴ.
     
epowergate 2018-12
WPF ?  Ƹ ϴ ϴ.
Electron̶ JAVAscript ΰ ϰ Ÿ ʹ شϴ.  δ JavaScript  ִ 𸣰ڽϴ.  ׳ ִܶ ܰ Դϴ.
׳ C# ٰ ؼ å 鼭 «« ְ Դϴ.
մϴ.
ö 2018-12
߿ ն Ʈũ ̺ üũϴµ ̺ ° ȣϸ ؼ ش ̺긦 غ ̻ ̺ Ӽ üũߴ
     
epowergate 2018-12
ش ̺ Ӽ üũ ϴ.
δ üũ  ص event monitoring Ҽ ...
մϴ
2018-12
UI õ ̶ ó
ش Form AutoScaleMode Ӽ None ΰ غ. κ ´. 10 ϸ ٲ㵵 °.
׷ ȵȴٸ ũⰡ ٲ ̺Ʈ ޾Ƽ ũ⸦ ؼ Ʈ ũ⸦ ؾϴµ.. ׷ 밡ٴ.. ϵ ϰ..
AutoScaleMode None δ Ͱ Ʈ Ŀ Ư 쿡 ũ ̺Ʈ ݴϴ.


QnA
Page 2596/5709
2015-12   1679806   ް
2014-05   5145669   1
2016-12   5059   B
2007-08   5059   â
2014-11   5059  
2008-09   5059   ä
2005-12   5059  
2007-03   5059  
2008-10   5059   ռ
2016-08   5059  
2006-11   5059   ȣ
2016-12   5059   ǹ̡
2007-09   5059  
2009-01   5059  
2017-12   5060   ̼
2007-06   5060   ѵ
2016-10   5060   GEUN
2018-03   5060   ǿ
2017-11   5060   Ĺ
2014-02   5060   Nikon
2007-06   5060   Ǽ
2016-03   5060