Невозможно получить доступ к каталогу точки повторной обработки смонтированного драйвера фильтра из учетной записи пользователя в Windows XP x64 prof
-
12-12-2019 - |
Вопрос
Я создал «специальную файловую систему» для особого приложения безопасности.
Я создаю точку повторной обработки, используя пустой каталог.За этой точкой повторной обработки находится драйвер фильтра, который обеспечивает связь между 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?!?