begin process at 2012 05 29 21:08:57
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

Fichier & Disque

 > 

Problème lecture secteur HDD - ReadFile - GetLastError() = 5


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème lecture secteur HDD - ReadFile - GetLastError() = 5

samedi 8 janvier 2011 à 11:18:25 | Problème lecture secteur HDD - ReadFile - GetLastError() = 5

nicolaspz

Bonjour.

J'ai repris l'exemple de récupération d'informations sur le disque dur de la MSDN.
Je veux en plus lire le MBR du disque via l'API ReadFile.
Le code compile et s'exécute mais GetLastError() renvoie le code erreur 5. Pourquoi à votre avis ?
J'ai testé le prog DiskInfo (http://www.cppfrance.com/codes/INFORMATIONS-SUR-VOS-DISQUES-DURS-WIN32_28413.aspx) qui utilise la même méthode et qui lui fonctionne...
D'avance merci.

Voici le code source :

#include <stdio.h>
#include <iostream>
#include <windows.h>
#include <winioctl.h>

#define MBR_SIZEOF 512

using namespace std;

BOOL GetMBR(BYTE *mbr)
{
HANDLE hDevice;
DWORD BytesRead;

hDevice=CreateFile(TEXT("\\\\.\\PhysicalDrive0"), 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
if (hDevice==INVALID_HANDLE_VALUE) return (FALSE);

SetFilePointer(hDevice, 0, NULL, FILE_BEGIN);
ReadFile(hDevice, mbr, MBR_SIZEOF, &BytesRead, NULL);

cout << "BytesRead : " << BytesRead << endl;
cout << "GetLastError() : " << GetLastError() << endl;

CloseHandle(hDevice);
}

BOOL GetDriveGeometry(DISK_GEOMETRY *pdg)
{
HANDLE hDevice;
BOOL bResult;
DWORD junk;

hDevice=CreateFile(TEXT("\\\\.\\PhysicalDrive0"), 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
if (hDevice==INVALID_HANDLE_VALUE) return (FALSE);

bResult=DeviceIoControl(hDevice, IOCTL_DISK_GET_DRIVE_GEOMETRY, NULL, 0, pdg, sizeof(*pdg), &junk, (LPOVERLAPPED) NULL);

CloseHandle(hDevice);
return bResult;
}

int main(int argc, char *argv[])
{
DISK_GEOMETRY pdg;
BOOL bResult;
ULONGLONG DiskSize;
BYTE mbr[MBR_SIZEOF];

bResult=GetDriveGeometry(&pdg);
if (bResult)
{
printf("Cylinders = %I64d\n", pdg.Cylinders);
printf("Tracks/Cylinder = %ld\n", (ULONG)pdg.TracksPerCylinder);
printf("Sectors/Track = %ld\n", (ULONG)pdg.SectorsPerTrack);
printf("Bytes/Sector = %ld\n", (ULONG)pdg.BytesPerSector);

DiskSize=pdg.Cylinders.QuadPart*(ULONG)pdg.TracksPerCylinder*(ULONG)pdg.SectorsPerTrack*(ULONG)pdg.BytesPerSector;
printf("DiskSize = %I64d (Bytes) = %I64d (Gb)\n", DiskSize, DiskSize/(1024*1024*1024));

}
else printf("GetGeometryDrive Failed. Error %ld.\n", GetLastError());

GetMBR(mbr);

system("PAUSE");
return EXIT_SUCCESS;
}

SORTIE CONSOLE :

Cylinders = 121601
Tracks/Cylinder = 255
Sectors/Track = 63
Bytes/Sector = 512
DiskSize = 1000202273280 (Bytes) = 931 (Gb)
BytesRead : 0
GetLastError() : 5
Press any key to continue . . .
samedi 8 janvier 2011 à 12:49:52 | Re : Problème lecture secteur HDD - ReadFile - GetLastError() = 5

ghuysmans99

Membre Club
Réponse acceptée !
Si tu ne demandes pas les droits en lecture, c'est normal qu'il t'envoie balader ...
Code C/C++ :
CreateFile(TEXT("\\\\.\\PhysicalDrive0"), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); 

Utilise cette fonction pour te donner un message d'erreur (tu peux aussi retenir les principaux par coeur, ou utiliser la liste de MSDN)

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
dimanche 9 janvier 2011 à 11:50:50 | Re : Problème lecture secteur HDD - ReadFile - GetLastError() = 5

nicolaspz

Bon Ok, j'ai vraiment lu la doc en diagonale...
Merci ghuysmans99, pour GENERIC_READ et le lien sur ErrorExit.


Cette discussion est classée dans : getlasterror, bresult, mbr, hdevice, pdg


Répondre à ce message

Sujets en rapport avec ce message

GetLastError [ par angdemon ] BONJOUR,A chaque fois que je vais sur mon serveur internet en loccurence Aol et que je surf sur internet j'ai réguliérement ce message d'erreur getlas int 21h [ par GEDEON ] Salut, j'aurais besoin d'aide pour appeler une interruption assembleur sousVisual C++......Tout mon code fonctionne sauf la ligne "int 21h"... Là j'ai MBR... [ par Foub12 ] Bonjour à tous !Comment pourrais-je faire en C pour lire et écrire dans le MBR d'une disquette ????Si vous avez des sources ou des idés, merci de m'ai getlasterror [ par Livvie ] I have a problem when connecting to (or deconnecting from) internet. i have a message Destroywindows-Error Getlasterror returned 5 and after clicking GetLastError renvoie 0x0000485 [ par ZogStriP ] Bonjour tout le monde !Je suis en train de tester un .OCX ( source disponible à l'adresse : http://jpbrown.i8.com/ZIPs/CubeSolvOCX_VCPP5_src.zip ) mai Pb API DeviceIOControl [ par bidoch78 ] Salut tout le monde,Je cherche desesperement de faire fonction l'API DeviceIOControl mais il n'y a rien à faire elle ne passe pas sur mon PC.Pour Info IOCTL_DISK_GET_LENGTH_INFO [ par vecchio56 ] BonsoirJ'essaie d'écrire une fonction pour connaitre la taille d'un disque physique, mais j'ai problème a l'appel de DeviceIoControl(). Voila ma fonct Accès à un disque SCSI ... [ par zoran_8000 ] Bonjour à tous ! Je dispose d'une source C / ASM que j'ai récupérée sur CS (site géniallissime est-il besoin de le rappeller !). Ce source permet d' pointeurs vers une fonction [ par PunkDude424 ] Bon j'ai le problème suivant....jai un programme avec un autre projet qui est dans une librairie externet qui est un LogWriter...quand je créee mon ob pointeur [ par imanedaoudi ] Bonjour,quelqu'un peu me dire pourkoi cette fonction génére une erreurRegionCoder::RegionCoder(Region b,int i){    int p=0; int n=pow(2,nbit); short *


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,011 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales