Невозможно получить доступ к каталогу точки повторной обработки смонтированного драйвера фильтра из учетной записи пользователя в Windows XP x64 prof

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

Вопрос

Я создал «специальную файловую систему» ​​для особого приложения безопасности.

Я создаю точку повторной обработки, используя пустой каталог.За этой точкой повторной обработки находится драйвер фильтра, который обеспечивает связь между NTFS и программой пользовательского режима, которая выполняет некоторую работу по шифрованию/дешифрованию и управлению (смесь FUSE, TrueCrypt, RamDisc,...).Все это встроено в C/C++ и отлично работает под Win7 x64.

Теперь у меня есть прекрасная задача заставить его работать на Windwos XP x64 Professional.Когда все приложение работает с правами администратора, оно работает нормально, но когда я переключаюсь на учетную запись пользователя, я не могу получить доступ к смонтированному каталогу.

Программа монтирования и «специальная файловая система» (назовем ее sfs) являются системными службами, и другое приложение должно запускаться под учетной записью пользователя (соответствует COM), операция монтирования успешна (когда я переключаюсь на учетную запись администратора после операции монтирования, я могу доступ к каталогу), остальные части приложения тоже работают нормально, но единственное, что мне не удается, это получить доступ к этому самому каталогу.

Я предоставил «всем», группе пользователей и конкретному пользователю все права доступа к драйверу, библиотеке (связь между драйвером и sfs), средству монтирования и специальной файловой системе, а также многое сделал в реестре.Я также дал эти разрешения смонтированному каталогу (все права, владелец,...), но ничего не работает.

Отпечаток отладки показывает, что запрос на каталог или файлы внутри никогда не поступает в "sfs".Кажется, что IO-Manager никогда ничего не отправляет на этот адрес.Другая проблема заключается в том, что мне не удается получить все отладочные данные из ОС (загрузиться в локальном режиме отладки и использовать DebugView.exe из SysInternals), но это уже другая история.

Что я пропустил?В чем разница между системой безопасности 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