Bonjour,
Les arcanes de CreateFile... :lol: bienvenue au club :lol:
A mon avis trois choses
1) Tu dois lancer ton application avec les droits administrateurs. Ou lancer Visual Studio (ou autre outil de dev) avec ces droits pour ensuite lancer ton appli depuis ce dernier. Ceci selon ce que tu ouvres, comment tu l'ouvres et si tu veux écrire dedans.
2) C: n'est pas un fichier. Il est vu par le système comme un répertoire, donc tu ne peux pas l'ouvrir avec CreateFile, pas plus que tu ne pourrais ouvrir c:\un_repertoire comme un fichier.
Pour résoudre l'ouverture de C: brute, il faut donner un nom de volume, par exemple:
"\\\\.\\PhysicalDrive0"
Attention danger, tu peux écrire direcement dans des secteur de disque avec cette aproche...
Sinon il faut donner un nom de fichier dans C:.
exemple:
#include <iostream>
using namespace std;
#include <windows.h>
#define FICHIER L"\\\\.\\C:\\helloword.txt"
//#define FICHIER L"\\\\.\\PhysicalDrive0"
int main () {
HANDLE _HandleDuVolume = NULL;
_HandleDuVolume = CreateFile(FICHIER,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if(_HandleDuVolume == INVALID_HANDLE_VALUE)
cout << "Invalide !" << endl;
else
cout << "OK !!" << endl;
CloseHandle(_HandleDuVolume);
}
3) Mais le mieux est d'ouvrir C pour ce qu'il est c'est à dire un répertoire, donc en donnant le flag FILE_FLAG_BACKUP_SEMANTICS. Tout simplement comme ceci:
#include <iostream>
using namespace std;
#include <windows.h>
#define FICHIER L"\\\\.\\C:\\"
int main () {
HANDLE _HandleDuVolume = NULL;
_HandleDuVolume = CreateFile(FICHIER,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL|FILE_FLAG_BACKUP_SEMANTICS ,
NULL);
if(_HandleDuVolume == INVALID_HANDLE_VALUE)
cout << "Invalide !" << endl;
else
cout << "OK !!" << endl;
CloseHandle(_HandleDuVolume);
}
Et là tu n'as même pas besoin des droits de l'administrateiur tant que tu te contentes de lire :)
Bonjour,
Les arcanes de CreateFile... :lol: bienvenue au club :lol:
A mon avis trois choses
1) Tu dois lancer ton application avec les droits administrateurs. Ou lancer Visual Studio (ou autre outil de dev) avec ces droits pour ensuite lancer ton appli depuis ce dernier. Ceci selon ce que tu ouvres, comment tu l'ouvres et si tu veux écrire dedans.
2) C: n'est pas un fichier. Il est vu par le système comme un répertoire, donc tu ne peux pas l'ouvrir avec CreateFile, pas plus que tu ne pourrais ouvrir c:\un_repertoire comme un fichier.
Pour résoudre l'ouverture de C: brute, il faut donner un nom de volume, par exemple:
"\\\\.\\PhysicalDrive0"
Attention danger, tu peux écrire direcement dans des secteur de disque avec cette aproche...
Sinon il faut donner un nom de fichier dans C:.
exemple:
3) Mais le mieux est d'ouvrir C pour ce qu'il est c'est à dire un répertoire, donc en donnant le flag FILE_FLAG_BACKUP_SEMANTICS. Tout simplement comme ceci:
Et là tu n'as même pas besoin des droits de l'administrateiur tant que tu te contentes de lire :)