c드라이브에 있는 모든 파일(하위 디렉토리 포함) 출력 중 엑세스 에러 발생 어떻하죠???(2)

inviolable의 이미지

이 질문을 올렸었는데, 언어가 c#이라는 것을 명시하지 않아서 다시 올립니다...ㅠㅠ 답변 주신 분 감사합니다.

c#이고요.

c드라이브를 루트 디렉토리로해서 하위 디렉토리까지 포함된 파일들의 이름과 갯수를 출력하는 프로그램인데요.

검색을 해서 폴더의 엑세스 권한을 수정하는 방법을 찾아 FullControl 권한을 얻었는데도 엑세스 권한이 없다고 나오네요...

코드까지 올려봅니다.

어떻게 해야될까요...ㅠㅠ

 
 int count = 0;
        private void button1_Click(object sender, EventArgs e)
        {
 
            DirectorySecurity dSecurity = Directory.GetAccessControl(@"c:\System Volume Information");
            dSecurity.AddAccessRule(new FileSystemAccessRule("XXX(계정인데 제 이름으로 되어있어서 프라이버시상 가렸습니다.)",
                FileSystemRights.FullControl, AccessControlType.Allow));
 
            FileTree(textBox1.Text);
 
            textBox2.AppendText("위 경로에 있는 파일은 " + count.ToString() + "개 입니다.");
 
 
        }
        private void FileTree(string path)
        {
            var Dir = from h in Directory.GetDirectories(path) select h;
 
            foreach (var h in Dir)
            {
                if(h != null)
                    FileTree(h);
            }
            var Files = from f in Directory.GetFiles(path) select f;
            foreach (var f in Files)
            {
                textBox2.AppendText(f + "\r\n");
                count++;
 
            }            
        }
mirheekl의 이미지

급히 테스트 프로그램을 만들어서 시도해봤는데 문제없이 잘 됩니다. CPP로 테스트하긴 했지만 닷넷에서도 Win32 API호출이 당연히 가능하므로 문제없이 잘 될 걸로 보입니다.

1. http://msdn.microsoft.com/en-us/library/windows/desktop/aa387705(v=vs.85).aspx 이걸로 프로세스에 백업/리스토어 권한을 줍니다.

2. http://stackoverflow.com/questions/2314542/listing-directory-contents-using-c-and-windows 여기에 나온 ListDirectoryContents 로 C:\System Volume Information 의 내용을 출력합니다.

1번을 생략할 경우 출력에 실패했고, 1번을 적용했을 경우 잘 출력이 되었습니다. 프로그램 실행은 어드민 권한으로 했습니다.

http://stackoverflow.com/questions/5510311/how-can-i-manipulate-token-privileges-in-net 이 문서를 참고하면 닷넷에서 이를 쉽게 적용할 수 있겠네요.

좀더 시간이 있었으면 닷넷 소스를 올려드렸을텐데 말이죠..

--

inviolable의 이미지

winapi32 함수 원형을 일일히 닷넷의 것으로 바꾸려고 하니 너무 힘드네요;;; luid는 int배열로 해도 되는지요...

닷넷 함수로 하는 방법은 없나요??? 시간은 충분하니 닷넷 함수로 하는 방법 좀 알려주시면 정말 감사하겠습니다.

요지는 프로세스 권한의 문제인가요??? 프로세스 권한을 어떻게 해야되는지 알려주시면 닷넷 함수로 해보는데 큰 도움이 될 거라고 생각합니다만...

mirheekl의 이미지

그런데 그걸 조절하는게 제가 알기론 닷넷에서 직접 지원하질 않는 걸로.. 그래서 저 많은 API interop들이 필요해지는 거지요.

제가 올려드린 마지막 링크에 이미 누가 그 API관련 준비작업을 해놓은 게 있습니다. 그러니 그냥 갖다 쓰시기만 하면 됩니다.

정 힘들면 C++/CLI 등으로 작업하고 그걸 그냥 C#에서 호출하셔도 됩니다. 네이티브 함수 사용량이 많아지면 이쪽이 맞는 방법입니다.

--

inviolable의 이미지

c 콘솔로 해서 프로세스 생성해서 핸들 얻은 다음에 그 핸들 넘겨주니까 되네요..ㅠㅠ

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.