2014-09-28 10 views
1

내가 뭘 하려는지 실제로 폴더가 시스템의 다른 곳에있는 동안 폴더가 자신의 폴더 내에 있다고 생각하는 프로그램을 실행하는 것입니다.가상 파일 시스템 내에서 프로세스를 실행 하시겠습니까?

그래서 프로세스에 프로세스를 실행하고 말을 내 프로그램 : 폴더 C에서 인 A : \ A는 C에서 자신의 디렉토리에 있습니다 : \ Program 파일 (x 86) \ SomeProgram \

그래서 "가상"디렉토리는 해당 프로세스에서만 볼 수 있습니다.

내 프로그램을 프로그래밍하는 데 Qt를 사용하고 있으므로 Qt 함수가 있으면 이식성과 관련하여 위대 할 수 있습니다. 그러나 계획 C++ 또는 모든 Windows 바인딩 된 API 괜찮을 것이다.

NTFS 접합점이나 심볼릭 링크에 대해 생각하고 있었지만 C++에서 이들 중 하나를 만드는 방법을 모를 것입니다.

미리 감사드립니다.

편집 :

은 상기와 관련하여, 나는이 질문을 발견했습니다 https://superuser.com/questions/234422/does-windows7-support-symbolic-links-folder-shortcuts. 그러나 명령 줄에서 필요한 작업을 수행하는 방법 만 보여주고 프로세스 바운드는 아닙니다.

편집 2 :

일부 추가 정보 : 내가 결정하는 우선 순위 시스템을 사용하고 있습니다 (다른 디렉토리의 몇 가지로 구성되어 가상 디렉터리를 만들려고하지만 합병있어하는 파일 "다른 파일에서 승리"). 이러한 병합 된 디렉터리는 병합 된 파일이 포함 된 하나의 디렉터리로 대상 프로세스에 나타납니다.

+0

심볼릭 링크에 대해 이야기하고 있습니까? –

+0

나는 그렇게 생각한다. 그러나 링크는 대상 프로세스에만 보이고 C++을 사용하여 생성해야한다. – Qub1

+1

한 가지 방법은 기본 파일 시스템 API (CreateFile, FindFirstFile 등)를 연결하고 거기에서 리디렉션을 수행하는 것입니다. 이 길로 가면 Microsoft의 Detours 라이브러리를 확인하는 것이 좋습니다. – MrEricSir

답변

0

Window의 mklink 명령을 계속 사용한다고 생각합니다. 내 요구에 가장 잘 맞는 것 같습니다.

내가 할 일은 Windows가 아닌 모든 운영 체제에서 QFile :: link()를 사용하고 Windows에서 mklink가있는 QProcess를 사용하는 것입니다. 이것은 모든 운영 체제에서 작동해야합니다. 좋은 예를 들어

은 이쪽을 봐 : https://stackoverflow.com/a/21013935/979732

0

이러한 작업은 파일 시스템 필터 드라이버를 사용하여 수행됩니다. 드라이버는 파일 시스템으로 진행되는 OS 요청을 가로 채고 자신의 가상 파일과 디렉토리를 디스크의 기존 디렉토리에 삽입 할 수있게합니다. 필터 드라이버는 특정 작업에 과도 함일 수 있습니다.

의견에 언급 된 Detours 접근법은 파일 API의 시스템 차원 후킹을 요구하며 전체 시스템 속도를 저하시킵니다 (파일 시스템 필터 드라이버는 하나의 디스크에 첨부되어 있으며 문서화 된 방식이므로 더 빠르고 견고합니다).