Windows XP X64 Prof의 사용자 계정에서 마운트 된 필터 드라이버의 재판지 디렉토리에 액세스 할 수 없습니다.

StackOverflow https://stackoverflow.com//questions/12692755

문제

매우 특별한 보안 응용 프로그램을위한 "특별 파일 시스템"을 만들었습니다.

빈 디렉토리를 사용하여 재판을 만듭니다. 이 재확인 포인트 뒤에는 일부 암호화 / 복호화 및 제어 작업 (퓨즈, 트루 메르 시트, Ramdisc, ... 사이의 혼합물)을 수행하는 NTFS와 UserMode 프로그램 간의 통신을 핸드하는 필터 드라이버입니다. 모든 것은 C / C ++에서 원시적이며 잘 unter win7 x64를 잘 작동합니다.

이제는 Windwos XP X64 Professional에서 작동하는 좋은 작업을 갖습니다. 전체 응용 프로그램이 관리자 권한으로 실행 중이면 잘 작동하지만 사용자 계정으로 전환하면 마운트 된 디렉토리에 액세스 할 수 없습니다.

마운터와 "특수 파일 시스템"(이름 IT의 이름을 지정하면 SFS는 COM 관련)에서 다른 앱을 실행 해야하는 경우 마운트 작업이 성공합니다 (마운트 후 관리자 계정으로 전환 할 때 작업 i 디렉토리에 액세스 할 수 있습니다.) 응용 프로그램의 다른 부분도 잘 작동하지만 관리 할 수없는 유일한 것은이 매우 디렉토리에 액세스하는 것입니다.

나는 "모두"와 사용자 그룹과 특정 사용자가 드라이버, 라이브러리 (드라이버 및 SFS 간의 링크), 마운터 및 특수 파일 시스템에 대한 많은 권한을 부여하고 레지스트리에서도 많이 수행했습니다. 나는 또한이 권한을 탑재 된 Dir (모든 ricths, 소유자, ...)에 주었지만 아무것도 작동하지 않습니다.

디렉토리 untrint는 디렉토리 또는 내부의 파일의 요청이 "SFS"에 오는 것과 관련이 없습니다. IO-Manager 가이의 추가를 보내지 않는 것 같습니다. 다른 문제는 OS에서 모든 디버그 unprint를 가져오고 SysInternals에서 debugview.exe를 사용하는 데 사용할 수 없지만 다른 이야기입니다.

나는 무엇을 그리워 했습니까? XP와 Win7의 보안 시스템의 차이점은 무엇입니까? 내가 모르는 XP에서 기본적인 제한이 있습니까?

코드의 스 니펫이 필요한지 물어보십시오.

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

도움이 되었습니까?

해결책

발견

장치 자체의 보안을 설정하는 것을 잊었습니다! 일찍이 일을 찾지 못하는 나쁜 것은 무엇입니까!: - (

이것은 마운트 서비스의 섹션입니다.

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에 했는가?!?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top