Não é possível acessar o diretório do ponto de nova análise do driver de filtro montado da conta de usuário no Windows XP x64 prof

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

Pergunta

Criei um “sistema de arquivos especial” para uma aplicação de segurança muito especial.

Eu crio um ponto de nova análise usando um diretório vazio.Por trás desse ponto de nova análise está um driver de filtro, que gerencia a comunicação entre o NTFS e um programa de modo de usuário, que está realizando algum trabalho de criptografia/descriptografia e controle (uma mistura entre FUSE, TrueCrypt, RamDisc,...).A coisa toda é nativa em C/C++ e funciona bem no Win7 x64.

Agora tenho a boa tarefa de fazê-lo funcionar no windwos xp x64 profissional.Quando todo o aplicativo está sendo executado com direitos de administrador, ele funciona bem, mas quando mudo para a conta de usuário, não consigo acessar o diretório montado.

O montador e o "sistema de arquivos especial" (vamos chamá-lo de sfs) são serviços do sistema e um outro aplicativo deve ser executado na conta do usuário (relevante para COM), a operação de montagem foi bem-sucedida (quando mudo para a conta de administrador após a operação de montagem, posso acessar o diretório), as outras partes do aplicativo também funcionam bem, mas a única coisa que não consigo fazer é obter acesso a esse mesmo diretório.

Dei ao "todos" e ao grupo de usuários e ao usuário específico todas as permissões para o driver, a biblioteca (link entre driver e sfs), o montador e o sistema de arquivos especial e fiz muito no registro também.Também dei essas permissões ao diretório montado (todos os direitos, proprietário,...), mas nada funciona.

A saída de depuração mostra que a solicitação do diretório ou dos arquivos contidos nunca chega a "sfs".Parece que o IO-Manager nunca envia algo para este endereço.Um outro problema é que não consigo obter todos os resultados de depuração do sistema operacional (inicialize no modo de depuração local e use DebugView.exe da SysInternals), mas isso é outra história.

O que eu perdi?Qual é a diferença entre o sistema de segurança do XP e do Win7?Existe alguma restrição básica no XP que eu não conheço?

Por favor, pergunte se você precisa de trechos do código.

Qualquer conselho ou ideia é bem-vindo!

Foi útil?

Solução

Encontrei!

Esqueci de configurar a segurança do próprio dispositivo!Que coisa ruim não encontrar isso antes!:-(

Esta é a seção no serviço de montagem:

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) {/*...*/}
}

Obrigado a todos vocês que dedicaram seu tempo para me ajudar!

...e por que diabos isso funcionou para Win7?!?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top