2012-10-02 9 views
1

매우 특별한 보안 응용 프로그램을 위해 "특수 파일 시스템"을 만들었습니다.Windows의 사용자 계정에서 마운트 된 필터 드라이버의 재분석 지점 디렉토리에 액세스 할 수 없습니다. xp x64 prof

빈 디렉토리를 사용하여 재분석 지점을 만듭니다. 이 재분석 지점 뒤에는 NTFS와 usermode 프로그램 간의 통신을 처리하는 필터 드라이버가 있습니다.이 프로그램은 일부 암호화/해독 및 제어 작업 (FUSE, TrueCrypt, RamDisc, ...의 혼합)을 수행합니다. 모든 것은 C/C++에서 네이티브이며 Win7 x64를 잘 작동합니다.

이제는 windwos xp x64 professional에서 작동하도록 좋은 작업을했습니다. 전체 응용 프로그램이 관리자 권한으로 실행되고 있으면 제대로 작동하지만 사용자 계정으로 전환하면 마운트 된 디렉토리에 액세스 할 수 없습니다.

마운터와 "특수 파일 시스템"(sfs라는 이름을 허용)은 시스템 서비스이고 다른 응용 프로그램은 사용자 계정 (COM 관련)에서 실행해야하며 마운트 작업은 성공적입니다 (이후 관리자 계정으로 전환하면 마운트 작업을 통해 디렉토리에 액세스 할 수 있음) 애플리케이션의 다른 부분도 제대로 작동하지만 관리 할 수없는 유일한 점은 바로이 디렉토리에 대한 액세스 권한을 얻는 것입니다.

"모든 사람"과 사용자 그룹 및 특정 사용자에게 드라이버, 라이브러리 (드라이버와 sfs 간 링크), 마운터 및 특수 파일 시스템에 대한 모든 권한을 부여했으며 레지스트리에서도 많은 작업을 수행했습니다. 나는 또한 마운트 된 dir (모든 rigths, owner, ...)에이 권한을 주었지만 아무것도 작동하지 않습니다.

디버그 아웃풋은 디렉터리 나 파일에 대한 요청이 결코 "sfs"에 오지 않는다는 것을 보여줍니다. IO 관리자는이 주소에 someting을 전송하지 않습니다. 다른 문제는 OS에서 모든 디버그 출력물을 가져올 수 없다는 것입니다 (로컬 디버그 모드로 부팅하고 SysInternals의 DebugView.exe 사용).하지만 또 다른 이야기입니다.

무엇을 놓쳤습니까? XP와 Win7의 보안 시스템의 차이점은 무엇입니까? XP에 모르는 기본적인 제한 사항이 있습니까?

코드 스 니펫이 필요한지 문의하십시오.

어떤 조언이나 아이디어를 환영합니다!

+1

특정 유형의 재분석 지점이 Windows XP에서 지원되는지 확인하십시오. – Wug

+1

재분석 지점 자체에 대한 사용 권한을 확인 했습니까? –

답변

0

발견!

기기 자체에 대한 보안 설정을 잊어 버렸습니다. 일찍이 찾아 내지 않는 것이 나쁜 것! !

:-(이 마운트 서비스의 절입니다 : 날 수 있도록 시간을 보낸 여러분 모두에게

static VOID GetSecAttr(PSECURITY_ATTRIBUTES SecAttr) 
{ 

    LPTSTR sd = L"D:P(A;;GA;;;SY)(A;;GRGWGX;;;BA)(A;;GRGW;;;WD)(A;;GR;;;RC)"; 

    ZeroMemory(SecAttr, sizeof(SECURITY_ATTRIBUTES)); 

    ConvertStringSecurityDescriptorToSecurityDescriptor(sd, SDDL_REVISION_1, &SecAttr->lpSecurityDescriptor, NULL); 

    SecAttr->nLength = sizeof(SECURITY_ATTRIBUTES); 
    SecAttr->bInheritHandle = TRUE; 
} 

static VOID WINAPI ServiceMain(DWORD dwArgc, LPTSTR *lpszArgv) 
{ 

//... some declarations ... 
    SECURITY_ATTRIBUTES sa; 

//... some stuff like syncronisation, named pipe and so on... 
    GetSecAttr(&sa); 

    device = CreateFile(
     MY_DEVICE_NAME, 
     GENERIC_READ | GENERIC_WRITE, 
     FILE_SHARE_READ | FILE_SHARE_WRITE, 
     &sa,    //!!! and this was NULL!!! 
     OPEN_EXISTING, 
     FILE_FLAG_OVERLAPPED, 
     NULL); 

    if (device == INVALID_HANDLE_VALUE) {/*...*/} 
} 

덕분에

... 그리고 도대체이 작품을 왜 그랬는지 Win7?