Ajouter un commentaire

fredericmazue

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 :)

Filtered HTML

Plain text

CAPTCHA
Cette question permet de vérifier que vous n'êtes pas un robot spammeur :-)
 FFFF  BBBB   U   U  DDD   EEEE 
F B B U U D D E
FFF BBBB U U D D EEE
F B B U U D D E
F BBBB UUU DDD EEEE