2013-09-24 6 views
2

인터넷에서 어딘가에서 같은 질문에 직면했습니다. 약간의 변화로 나는 이미 아래에 질문을 수정했다.:: createFile winApi가 오류 5 (access_denied)로 실패합니다. 쉘 프로그래밍 또는 다른 솔루션 또는 힌트입니다.

질문 :

내가 원격 시스템 (10.10.20.30)에있는 파일에 액세스하려면,하지만 난 내 프로그램에서 해당 컴퓨터에 로그인하는 방법을 이해 couldnt한다. 네트워크 경로, 자격 증명을 받아 파일 핸들을 반환하는 간단한 승리 API가 있습니까? 방금 \ 10.10.20.30 \ share folder \ test.txt에 액세스하려고합니다. 제안 사항이 도움이 될 것입니다.

미안하지만 코딩 감각이 분명하지 않습니다. 상세 정보 : 공유 폴더에서 공유되는 파일에 액세스하려고했지만 권한이 부여되지 않았습니다. 나는 :: CreateFile을 사용하여 파일의 헨켈을 얻습니다. 그러나이 경우 나는 오류 코드 5 (ACCESS_DENIED)를 암시합니다. 공유되는 파일에 액세스하려면 사용자 (내 클라이언트) 권한 정보 (사용자 이름 암호)를 사용해야합니다. 난 그냥 파일의 핸들이 필요해. 내가 틀렸다면 말해봐 : CreateFile은 MSDN에서 말한 것처럼 보안 속성을 사용하거나 수정함으로써이 경우 사용할 수 없다. CreateFile은 기존 파일을 열 때 lpSecurityDescriptor 멤버를 무시합니다. 또한 Window 셸을 사용한다고 생각했지만 솔루션을 다시 쓸 수 없었습니다.

문제 세부 정보 * 글쎄 요구 사항은 원격 컴퓨터에서 Everyone 권한이 없습니다. 예를 통해 설명하겠습니다. 최소한 3 대의 컴퓨터가 있다고 말하는 특정 도메인의 네트워크가 있다고 가정합니다. 이제는 C1 (클라이언트), C2 (대상), C3, C4, C5가 있습니다. 이제이 경우 C2 컴퓨터에서 파일 (모든 유형)을 만들고 그 폴더에 MyFolder라고 말합니다. 이제 공유하고 그 후에 Everyone을 제거하십시오. 그런 다음 C5를 액세스하기위한 사용자로 추가하십시오. 이제 그냥 :: CreateFile 구현으로 일부 코드를 작성하고 컴퓨터 C1 (클라이언트)과 C5 (권한이 있음)에서 모두 실행할 수 있습니다. 당신은 클라이언트 (C1)이 ACCESS_DENIED를 의미하는 에러 5를 얻게 될 것이고 C5가 그것을 실행할 것이고 파일 핸들을 얻을 것임을 알 수있을 것이다 ...... 다시 한번 나는 내 질문을 반복한다. 사용자 이름과 암호, 그리고 내 프로그램은

나에게 사전에 감사를 조언 해 주시기 바랍니다 C1 기계 .. *에서 핸들을 얻을 것이다

:: CreateFile이 거부 액세스와 쉘 프로그래밍 또는 다른 솔루션이나 힌트 실패한다

+0

아마도 [NetUseAdd] (http://msdn.microsoft.com/en-us/library/windows/desktop/aa370645(v=vs.85) .aspx) 기능을 사용해야합니다. Windows 탐색기에서 "\\ 10.10.20.30 \ share folder \"열 수있는 경우이 작동합니다. –

+0

@MichaelWalz 탐험가를 통해 열 수 없습니다. 위의 문제 세부 사항을 참조하십시오. – user2809792

+0

이 문제가 해결 되었습니까? 네트워크 경로, 자격 증명을 받아 파일 핸들을 반환하는 간단한 승리 API가 있습니까? – AcidBurn

답변

1

ERROR_ACCESS_DENIED으로 실패하면 CreateFile을 호출하는 프로세스가 해당 작업을 수행 할 수있는 충분한 권한이없는 사용자 계정으로 실행됩니다. 해당 사용자 충분한 권한을 부여

  1. :

    는 다음과 같은 방법으로 문제를 해결한다.

  2. 충분한 권한을 가진 다른 사용자 계정으로 프로세스를 실행합니다. 또는 가장을 사용하여 CreateFile에 다른 사용자 토큰으로 전화하십시오.
  3. 원본 권한이 낮은 원래 사용자가 작업을 수행 할 수 있도록 해당 파일을 보호합니다.

결론은 여기서 코딩하는 데 도움이되지 않는다는 것입니다. 이 문제는 문제가되는 파일 시스템 객체의 보안 문제입니다.이것은 프로그래밍 문제가 아니라 관리상의 문제입니다.

+0

1. 해당 사용자에게 충분한 권한을 부여하십시오. 너가 그것을 mannually 말한 경우에 저것은 나의 케이스 안에 허용하지 않는다. 원격 컴퓨터에서 코드를 통해 권한을 변경하는 경우 (나는 또한 코드를 찾고있다.) 2. 나는 다른 사용자가 아닌 내 클라이언트 자격 증명을 통해 로그인해야한다. 3. 나는 그게 무슨 뜻인지 이해하지 못했습니다. .... 글쎄 그것은 코딩을 통해 불가능하다는 말을하는 것 같습니다. 하지만 나는 100 % 확신 할 때까지는 불가능하다고 말할 수 없습니다 ..... 그리고 빠른 답장을 주셔서 감사합니다 ... :) – user2809792

+0

클라이언트 코드로 보안을 우회 할 수 있다면 보안이 깨질 수 있습니다. 다음 단계는 Windows 보안 모델에 대해 학습하는 것입니다. –

+0

나는 시도했지만 어떤 링크를 찾을 수 없었다. 나는 너를 위해 나를 찾도록 요구하지 않고있다. 그러나 마음에있는 것이 있으면 공유하십시오. – user2809792

2

앱이 파일에 액세스 할 수있는 권한이있는 사용자 계정으로 실행되지 않는 경우 액세스 권한이있는 사용자를 일시적으로 가장해야합니다. LogonUser()을 사용하여 원하는 사용자 계정에 로그인하고 토큰을 얻은 다음 해당 토큰을 ImpersonateLoggedOnUser()으로 전달하여 해당 사용자를 가장하고 CreateFile() (가장 된 권한을 사용)으로 전화하고 필요에 따라 파일을 사용한 다음 파일을 닫습니다 명의 도용을 중지하려면 RevertToSelf()으로 전화하십시오.