Bonjour,
je cherche à écrire directement à une adresse bien précise dans le disque dur comment pourrais-je m'y prendre sous Windows 7 ?
Bonjour,
je cherche à écrire directement à une adresse bien précise dans le disque dur comment pourrais-je m'y prendre sous Windows 7 ?
A priori, tu ne veux pas le faire.
Du moins, pas à moins d'avoir une très bonne raison de le faire.
Tu peux écrire à un endroit bien spécifique du système de fichier, mais vouloir contourner celui-ci, c'est prendre énormément de risques.
Windows pourrait devenir incapable de lire le fichier qui se trouve être écrit cet endroit là, voire si c'est un dossier, l'intégralité de son contenu.
Pire, parce qu'il n'arriverait pas à lire le dossier, il pourrait cesser de savoir que les fichiers à l'intérieur existent, et écrire par dessus.
Pire encore, si tu écris dans la zone de fonctionnement du système de fichier, le disque dur entier pourrait ne plus être vu comme formatté.
Dans le cas ultimement tragique où tu écrirais dans le secteur racine, ton disque pourrait devenir totalement inutilisable, voire paralyser l'ordinateur complet (si c'est le disque de boot).
D'où ma question:
Pour quel usage aurais-tu besoin d'une telle chose?
Mes principes de bases du codeur qui veut pouvoir dormir:Pour faire des graphes, essayez yEd.
- Une variable de moins est une source d'erreur en moins.
- Un pointeur de moins est une montagne d'erreurs en moins.
- Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
- jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
- La plus sotte des questions est celle qu'on ne pose pas.
le ter nel est le titre porté par un de mes personnages de jeu de rôle
Merci pour ta réponse, je dois simuler un programme qui nécessite beaucoup de RAM, n'en ayant pas assez je préfère assigner tout le rôle de RAM à mon disque dur. Le programme en question va massivement aller d'adresse en adresse, je ne peux donc pas écrire dans un fichier car le rechercher d'abord dans la table prendrait énormément de temps en plus de celui d'accès au disque dur.
Bien, c'est beaucoup plus raisonnable. Tu ne veux pas écrire à une adresse arbitraire du disque, mais tu veux juste un "fichier à accès direct"
Regarde du cote de mmap().
C'est la fonction système linux qui permet de faire précisément ce genre de chose.
Pour windows, je te laisse chercher dans la doc système qui va bien (je ne sais où dans la MSDN)
PS: je trouve amusant de te voir, toi spécifiquement, UbuntuHuit, chercher de l'aide pour WindowsSept
Mes principes de bases du codeur qui veut pouvoir dormir:Pour faire des graphes, essayez yEd.
- Une variable de moins est une source d'erreur en moins.
- Un pointeur de moins est une montagne d'erreurs en moins.
- Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
- jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
- La plus sotte des questions est celle qu'on ne pose pas.
le ter nel est le titre porté par un de mes personnages de jeu de rôle
l'OS ne te laissera pas faire.Écrire directement dans l'adresse du disque dur sous Windows 7
ça s’appelle la mémoire virtuelle.préfère assigner tout le rôle de RAM à mon disque dur.
https://msdn.microsoft.com/fr-fr/lib...(v=vs.85).aspx
Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
Mon article sur le P2V, mon article sur le cloud
Consultez nos FAQ : Windows, Linux, Virtualisation
Pour avoir un accès fichier qui ressemble à un accès mémoire, sous windows, c'est CreateFileMapping + MapViewOfFile. C'est l'équivalent du mmap sous linux.
Et s'il y a des moyens d'avoir un accès bas niveau au disque dur (par exemple pour écrire un défragmenteur de disque), ça ne m'a pas l'air nécessaire du tout ici.
Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.
Écrire et lire à une adresse dans un secteur unique en bas niveau c'est exactement ce que je veux faire et le programme est en c++ je ne l'avais pas dit.
Je programmes pas sous Windows mais je pense que tu devrais pouvoir t'en sortir avec ça :
https://support.microsoft.com/en-us/...ss-under-win32
https://msdn.microsoft.com/fr-fr/lib...(v=vs.85).aspx
Attention : super dangereux.
Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
Mon article sur le P2V, mon article sur le cloud
Consultez nos FAQ : Windows, Linux, Virtualisation
Ubuntuhuit, je suis curieux de savoir si tu as trouvé une solution.
Et, accessoirement, la motivation de ta demande.
Pour compléter les autres réponses, il existe une petite bibliothèque qui fait du file mapping. C'est standard, (très) performant, et utilise les fonctionnalités de l'OS: LMDB
Ici le code:
https://github.com/LMDB/lmdb
et ici un excellent fork:
https://github.com/ReOpen/libmdbx
Les réponses postés précédemment ont pu m'aider, j'en avais besoin car je devais simuler un logiciel qui réellement fonctionne avec 12go de RAM que je n'avais pas. Dans ces 12go de RAM simulés avec le disque dur le logiciel passe massivement d'un unique secteur à l'autre, où chaque secteur a une adresse aléatoire.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager