Я создал «специальную файловую систему» для очень специального приложения безопасности.
Я создаю точку повторной обработки, используя пустой каталог. За этой точкой повторного анализа находится драйвер фильтра, который управляет связью между NTFS и программой пользовательского режима, которая выполняет некоторую работу по шифрованию / дешифрованию и управлению (смесь FUSE, TrueCrypt, RamDisc, …). Все это встроено в C / C ++ и отлично работает под Win7 x64.
Теперь у меня есть хорошая задача, чтобы заставить его работать на windwos xp x64 professional. Когда все приложение работает с правами администратора, оно работает нормально, но когда я переключаюсь на учетную запись пользователя, я не могу получить доступ к смонтированному каталогу.
Mounter и «специальная файловая система» (назовем это sfs) являются системными службами, а другое приложение должно запускаться под учетной записью пользователя (в соответствии с COM), операция монтирования прошла успешно (когда я переключаюсь на учетную запись администратора после операции монтирования, я могу доступ к каталогу), остальные части приложения также работают нормально, но единственное, что я не могу сделать, — это получить доступ к этому самому каталогу.
Я дал «всем», группе пользователей и конкретному пользователю все права на драйвер, библиотеку (связь между драйвером и sfs), монтировщик и специальную файловую систему, а также многое сделал в реестре. Я также дал эти разрешения для смонтированного каталога (все права, владелец, …), но ничего не работает.
Отладочная отладка показывает, что запрос на каталог или файлы внутри никогда не приходит к «sfs». Кажется, что IO-Manager никогда не отправляет что-то по этому адресу. Другая проблема заключается в том, что мне не удается получить все отладочные оттиски из ОС (загрузиться в локальном режиме отладки и использовать DebugView.exe из SysInternals), но это другая история.
Что я упустил? В чем разница между системой безопасности XP и Win7? Есть ли какие-то основные ограничения в XP, которых я не знаю?
Пожалуйста, спросите, нужны ли вам фрагменты кода.
Любые советы или идеи приветствуются!
Нашел это!
Я забыл установить безопасность для устройства itselfe!
Какая плохая вещь, чтобы не найти это раньше! 🙁
Это раздел службы монтирования:
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?!?
Других решений пока нет …