No se puede acceder a Reparse Point Directory del controlador de filtro montado desde la cuenta de usuario en Windows XP X64 Prof

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

Pregunta

He creado un "sistema de archivos especial" para una aplicación de seguridad muy especial.

He creo un punto de reparación usando un directorio vacío. Detrás de este punto de repartes hay un controlador de filtro, que marca la comunicación entre NTFS y un programa de código de usermo, que está realizando algún resultado de cifrado / descifrado y control (una mezcla entre fusible, truecrypt, ramdisc, ...). Todo el asunto es nativo en C / C ++ y funciona bien under win7 x64.

Ahora tengo la buena tarea para hacer que funcione para WindWos XP X64 Professional. Cuando toda la aplicación se ejecuta con derechos de administrador, funciona bien, pero cuando cambie a la cuenta de usuario, no puedo acceder al directorio montado.

El Mounter y el "Sistema de archivos especiales" (le digamos que los SFS) son servicios del sistema y una otra aplicación debe ejecutarse en la cuenta de usuario (COM RELEY), la operación de montaje es exitosa (cuando cambie a la cuenta de administrador después de la cuenta Operación Puedo acceder al directorio), las otras partes de la aplicación también funcionan bien, pero lo único que no puedo administrar es obtener acceso a este mismo directorio.

Le di a los "todos" y el grupo de usuarios y el usuario específico de todos los permisos para el conductor, la biblioteca (enlace entre el controlador y el SFS), el Mounter y el sistema de archivos especial e hicieron mucho en el registro. También le dio a estos permisos a la dirección Montada (todos los Rigths, propietario, ...) pero nada funciona.

La exclusión de depuración muestra, que la solicitud de directorio o los archivos dentro nunca se acerca a "SFS". Parece que el gerente io nunca envía algo a este adicto. Un otro problema es que no puedo lograr obtener todos los errores de depuración del sistema operativo (arranque en modo de depuración local y use DEBUGVIEW.EXE de SysInternals), pero esa es otra historia.

¿Qué extraño? ¿Cuál es la diferencia entre el sistema de seguridad de XP y Win7? ¿Hay alguna restricción básica en XP que no conozco?

Pregunte si necesita fragmentos de código.

¡Cualquier consejo o idea es bienvenido!

¿Fue útil?

Solución

¡Lo encontré!

¡Olvidé establecer la seguridad para el propio dispositivo! ¡Qué cosa mala de no encontrar esto antes!: - (

Esta es la sección en el servicio de montaje:

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

¡Gracias a todos ustedes que pasaron tiempo para ayudarme!

... ¿Y por qué demonios hizo esto para Win7?!?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top