Impossible d'accéder au répertoire Point de reparse du pilote de filtre monté à partir du compte d'utilisateur dans Windows XP X64 Prof

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

Question

J'ai créé un "système de fichiers spécial" pour une application de sécurité très spéciale.

Je crée un point de reparse à l'aide d'un répertoire vide. Derrière ce point de reparse est un pilote de filtrage, qui headige la communication entre NTFS et un programme d'UserMode, qui fait du cryptage / du déchiffrement et du travail de contrôle (un mélange entre fusible, Truecrypt, Ramdisc, ...). Toute la chose est originaire de C / C ++ et fonctionne Fine Unter Win7 X64.

Maintenant, j'ai la belle tâche de faire fonctionner pour Windwos XP X64 Professionnel. Lorsque l'ensemble de l'application est en cours d'exécution avec les droits de l'administrateur, cela fonctionne bien, mais lorsque je passe au compte d'utilisateur, je ne peux pas accéder au répertoire monté.

Le Mounter et le "Système de fichiers spécial" (Nommer le nom de SFS) sont des services système et une autre application doivent être exécutés sous un compte utilisateur (COM pertinent), le fonctionnement du montage est réussi (lorsque je passe au compte d'administration après le montage. Opération Je peux accéder au répertoire), les autres parties de l'application fonctionne aussi bien, mais la seule chose que je ne puisse pas gérer est d'accéder à ce répertoire très.

J'ai donné le "Tout le monde" et le groupe d'utilisateurs et l'utilisateur spécifique toutes les autorisations au pilote, la bibliothèque (lien entre pilote et SFS), le Mounter et le système de fichiers spécial et ont également beaucoup dans le registre. J'ai également donné à ces autorisations au dir monté (toutes les rabais, propriétaire, ...) mais rien ne fonctionne.

L'extension de débogage montre que la demande de répertoire ou des fichiers à l'intérieur ne vient jamais à "SFS". Il semble que l'IO-Manager n'envoie jamais quelque chose à ces addres. Un autre problème est que je ne puisse pas réussir à obtenir toutes les empreintes de débogage du système d'exploitation (démarrage en mode de débogage local et utilisez debugview.exe de Sysinternals), mais c'est une autre histoire.

Qu'est-ce que j'ai manqué? Quelle est la différence entre le système de sécurité de XP et Win7? Y a-t-il des restrictions de base dans XP que je ne sais pas?

S'il vous plaît demander si vous avez besoin d'extraits du code.

Un avantage ou une idée est la bienvenue!

Était-ce utile?

La solution

trouvé!

J'ai oublié de définir la sécurité pour l'appareil en soi! Quelle mauvaise chose ne pas trouver cela plus tôt!: - (

Ceci est la section dans le service de montage:

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

Merci à tous ceux qui ont passé du temps à m'aider!

... et pourquoi diable a fait ce travail pour Win7?!?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top