c ++ - Kan en ansøgning foregive at være en fil eller mappe?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har set på at centralisere mit computerspil gemmer for at gøre det nemmere at sikkerhedskopiere og gendanne samt sætte dem op på skyen via dropbox, men der kan det være steder, at det gør det ret svært. Jeg har bemærket Windows 7 og Vista støtte nu symbolske links, så jeg har spillet rundt med det, men jeg spekulerede på følgende:


Er det muligt (kodeeksempel eller et punkt i den rigtige retning) for en applikation (vb.net eller C ++) at spoof en fil eller mappe?


F.eks. Applikation A (et spil som Diablo III eller Civilization V) forsøger at læse eller højre fra fil A (spillet gemmer), registrerer ansøgning B (opbevaringsarkivet) denne læsnings-/skriveanmodning og piper forespørgslen gennem sig selv forud for at udforme anmodningen på filen B (det faktiske spil gemmes på et andet sted). Applikation A ændres på ingen måde og behandler filen normalt.


Bemærk: Jeg er klar over, at der er mange enkle måder at præforme den samme opgave i essensen som at overvåge anvendelsen af ​​Application A eller regelmæssigt kontrollere fil A og kopiere den, hvis den er blevet ændret siden sidste check osv., Men alle disse metoder har tegnet ryggen og mindre interesseret i at få det til at fungere, end hvis det er muligt.

Bedste reference


Det er helt muligt at gøre dette via en filsystem filtre driver. For information om disse, se her:


http://msdn.microsoft.com/en-us/windows/hardware/gg462968[3]


Filterdrivere kan koble til CreateFile-operationer og omdirigere oprettelsen til et andet sted, hvis du vil, men de er meget sværere at skrive i forhold til normale applikationer. De kører i kernel mode og skal overholde begrænsningerne af drivere.

Andre referencer 1


Du kan 'falske' specielle mapper, som kontrolpanel gør, men jeg tror ikke, du kan oprette noget tilgængeligt/skrivebar (på en nem måde). Jeg kunne måske være forkert. Jeg havde også den samme ide en gang også (som en kompatibilitet skridt for nogle firma ting), men kunne ikke finde noget, der støtter en nem måde at gøre det på. Det ser ud til, at det kan være lettere at gøre på Unix-systemer (men det er naturligvis ingen mulighed her). Jeg ville heller ikke forvente nogen gode eller nemme løsninger til .net.


Kun tilgang jeg kunne tænke på lige nu ville være highjacking de tilsvarende API-opkald (f.eks. FileOpen) for at omdirigere/manipulere dem (svarende til hvilke rodsæt gør), men det ville jeg ikke sige, i betragtning af det kan detekteres som muligt malware eller snyd af ting som punkbuster eller antivirus løsninger.

Andre referencer 2


Ja eller nej afhængigt af (ved hjælp af dine vilkår) niveauet for abstraktion, som Application A bruger.


Hvis Applikation A udfører en CreateFile wto start adgang og passerer en fast filsystembane, vil Application B skulle emulere et filsystem og gøre det i kernen.


På den anden side, hvis Application A skulle bruge HTTP med RESTful URL'er, kunne HTTP-serveren besvare alle anmodninger fra filer eller ved dynamisk at skabe indholdet.


Så spørgsmålet kan kun besvares specifikt ved at kende detaljerne i ansøgning A.