2017-04-17 18 views
0

Windows에서 특정 파일의 일반 ReadFile이 파일 시스템에 의해 실제로 실행되도록 리디렉션되는 설정을 만드는 것이 얼마나 힘든지 궁금합니다 (예 : ShellExecute) 이러한 파일을 만든 다음 새 프로세스의 stdout을 파일 내용으로 사용하여 호출 수신자에게 ReadFile 호출로 스트리밍합니다. ...Windows : ReadFile을 리디렉션하여 프로세스를 실행하고 stdout 파이프 처리

모양을 설정하는 방법은 다음과 같이 구성 할 수 있습니다 특정 폴더를 '특별'로 표시하고이 추가 기능을 해당 폴더의 내용에서만 사용할 수 있습니다 (따라서 디스크 전체가 될 필요는 없습니다). 새 드라이브 문자 또는 원본 폴더와 평행 한 경로에서 액세스 할 수 있습니다. 그것이 연결되어있는 위치는 저에게 관련이 없습니다.

이것이 고전적인 xy 문제인지 궁금한 분들께 : 매우 좋을지도 모릅니다.)이 아이디어가 내게 흥미로웠다는 것과 그 가능성이 무엇인지 알고 싶습니다. 필자의 경우 C++ 코드베이스에 #include 내용을 포함 시키려고합니다. 여기에는 포함 된 실제 내용이 각 컴파일 라운드마다 달라집니다. 또한 물론 포함 할 수있는 컨텐츠를 작성하는 스크립트를 작성하여 사전 빌드 단계로 부르고 그 단계로 두지 만 쉬운 경로를 선택하는 이유는 무엇입니까?

어쩌면 이미 기성품 해결책이 있습니까? 나는 광범위한 Google 검색을 수행했지만 빈 손으로 나왔다. 그런데 나는 좋은 키워드 검색을하기 위해 모든 키워드를 이미 알고 있는지 잘 모르겠다. ...

나 자신을 코딩 할 때, 미니 필터 드라이버가 ReadFile 호출을 가로 챌 필요가 있을지도 모르겠다. 커널 공간에서 usermode 앱을 실행 해보세요. 행복한 결혼이 아닙니다. 또는 usermode 부분을 허용하는 기존 파일 시스템 드라이버 프레임 워크를 사용하지만, 기존 솔루션의 가격이 너무 많아서 (수천 달러) 내 취향에 가파른 것으로 나타났습니다. 그리고 표준 파일 시스템 (minifilter) 드라이버는 ReadFile을 통해 반환 된 실제 데이터 크기가 물론 각 호출마다 다르더라도 그러한 파일에 대해 일관된 파일 크기를 반환해야한다고 가정합니다. 발생하는 버퍼링을 무효화하는 것은 말할 것도 없습니다. 전체적으로 필자는 자신의 인생에서 Windows 드라이버 개발을 한 번도 해보지 않은 경우 create-it-yourself 솔루션이 상당한 노력을 기울일 것이라고 생각합니다. 나는 그것에 대해 배우는 능력이 뛰어나지 만 투자 한 시간은 내 생각에 금지되어있어.

또 다른 접근법은 IAT 후크 또는 코드 삽입을 통해 ReadFile을 수행하는 프로세스에서 ReadFile 호출을 연결하는 것입니다. 그러나이 솔루션을 '즉시 사용'하기를 원합니다. 즉, 이러한 특수 파일에 대한 모든 ReadFile 요청은 출처에 관계없이 올바른 동작을 트리거합니다. 필자의 경우에는 C++ 컴파일러 (G ++) 동작을 가로 챌 필요가 있지만 IDE에서 즉시 호출되므로 시작 파일을 감지하고 ReadFiles가되기 전에 빨리 연결해야합니다. 게다가, 나는 단지 특정 파일이이 점에서 특별하기를 원한다. 특정 프로세스에 대한 모든 ReadFiles를 가로채는 것은 지나치게 어렵습니다.

+0

@downvoter : downvote에 대해 자세히 설명하고 싶습니까? 나는 알고있는 사람들에게 이것은 사소하고 명백한 무의미한 어리석은 질문처럼 보일지 모르지만 나는이 깊은 이해가 부족합니다. 이 게시물은 나에게 (그리고 아마도 다른 사람들에게) 실제 솔루션 (그것이 존재한다면)으로 인도하는 것보다 이것을 배우는 것이 더 중요합니다. –

답변

2

너는 FUSE (나는 여러 번 이익을 내고 사용함)을 원하지만, Windows를 원한다. 분명히 Dokan이 있는데, 나는 그것을 사용한 적이 없지만 충분히 잘 알려져있는 것 같습니다 (그리고 적어도 "어떻게 완료했는지"를 볼 수있는 영감으로 사용될 수 있습니다).

+1

고마워요! 잠깐 들락 거 렸던 MinGW (나도 사용하고있는 것)를 사용하는 것 같습니다. 또한 개발이 번거롭고 usermode 코드를 실행할 수 있습니다. 이제는 유스 케이스의 총 잔인 함을 알아낼 시간이지만, 재미있는 프로젝트처럼 보입니다! –