2017-01-12 1 views
0

우리는 SMB2 프로토콜을 구현하고 있습니다. 이전 파일 버전을 표시하려면 클라이언트가 SMB2 IOCTL reqeust with CtlCode of FSCTL_SRV_ENUMERATE_SNAPSHOTS을 보냅니다. http://download.microsoft.com/download/9/5/E/95EF66AF-9026-4BB0-A41D-A4F81802D92C/%5BMS-SMB2%5D.pdf에 설명 된대로 응답을 보냅니다. 3.3.5.15.1 이전 버전 열거 요청 처리이전 버전의 파일은 SMB 클라이언트에서 볼 수 없습니다.

속성 -> 이전 버전의 디렉토리를 클릭하면 반환되는 이전 버전이 표시되지만 표시되지 않는 파일은 표시됩니다. 아무것도. 필자는 파일과 디렉토리 모두에 대해 동일한 응답을 반환했는지 확인했습니다.

파일이 작동하지 않는 이유는 무엇입니까? 이전 버전과 관련하여 파일 및 디렉토리가 다른 점은 무엇입니까? Windows 클라이언트에서 이전 버전의 파일을 보는 데 지원해야하는 다른 요청은 무엇입니까?

+0

서버를 개발하려면 클라이언트가 보내는 모든 요청을 받아야합니다. 왜 모든 요청을 기록하고 하나씩 확인하지 않습니까? –

답변

1

디렉토리/파일 속성 (이전 버전 탭)을 열 때 일부 로컬 호스트 통신을 스니핑했습니다. 클라이언트가 CreateContexts에 SMB2_CREATE_TIMEWARP_TOKEN ([MS-SMB2], 2.2.13.2.7)이 포함 된 CreatFile 요청 ([MS-SMB2], 2.2.13SMB2 CREATE 요청)을 보냈습니다. 클라이언트는 스냅 샷 목록을 가져온 다음 SMB2_CREATE_TIMEWARP_TOKEN의 타임 스탬프를 사용하여 요청 만들기를 수행하는 타임 스탬프를 순환시킵니다.
클라이언트가 다른 스냅 샷에서 파일을 열고 파일 수정 시간을 사용하여 변경 사항을 비교하려고합니다. 그런 다음 모든 다른 버전을 표시하십시오.

+0

이전 버전을 지원하려면 REPARSE_POINTS가 필요합니까? – Ashot

+0

캡처 파일을 보내면 어떤 부분이 잘못되었는지 알 수 있습니까? – Ashot

+0

@Ashot 캡쳐 된 패킷을 보았지만 STATUS_NOT_A_REPARSE_POINT와 같은 것으로 완료되었습니다. "재분석 지점", "심볼릭 링크"정의로 판단하면 클라이언트가 디렉토리 나 파일이 다른 실제 장소에 있지 않은지 확인합니다. 필요한지는 모르겠지만 이러한 요청에 대한 답장은 "재분석 지점이 아닙니다"라고 할 수 있습니다. 그러나 재분석 지점은 링크 일뿐만 아니라 서버 데이터를 설명하는 모든 직원을 구현하는 것이 좋습니다. 예를 들어 암호화 키가 될 수 있습니다. –

1

이것은 특정 Windows 셰이프 동작이거나 서버의 버그 일 수 있습니다. 우리는 우리의 NQ 스토리지 서버로 테스트했고 클라이언트가 2012 년 일 때 파일과 폴더 모두에서 잘 작동했습니다. 우리는 serveral 다른 창을 테스트했지만 현재 어떤 서버인지는 기억할 수 없습니다. 솔직히 우리는 Win 형태가 너무 많은 스냅 샷을 테스트하지 않았습니다. 캡처하면, 어떤 측면 (C 또는 S)이 유죄인지 힌트를 줄 수 있습니다.

+0

REPARSE_POINTS을 (를) 지원합니까? 이전 버전을 지원해야합니까? – Ashot

+0

캡처 파일을 보내면 어떤 부분이 잘못되었는지 알 수 있습니까? – Ashot

+0

적어도 시도 할 것입니다. 나를 찾을 수 있습니다 s k y p e as markrabinovich –

관련 문제