У меня есть виртуальная машина Windows 7 с флоппи-диском (настроен A :). Я пытаюсь прочитать загрузочный сектор флоппи-дисковода в структуру. Однако каждый раз, когда я запускаю эту программу, он не может найти дискету. Я могу подтвердить, что он доступен.Программа C не удается получить дескриптор флоппи-дисковода
Код:
#include "stdafx.h"
#include<Windows.h>
#include<stdio.h>
#include<conio.h>
#include<WinBase.h>
#pragma pack(1)
struct boot
{
BYTE jump[3];
char bsOemName[8];
WORD bytesperSector;
BYTE sectorpercluster;
WORD sectorsreservedarea;
BYTE copiesFAT;
WORD maxrootdirentries;
WORD totalSectors;
BYTE mediaDescriptor;
WORD sectorsperFAT;
WORD sectorsperTrack;
WORD sides;
WORD hiddenSectors;
char reserve[480];
};
void ReadSector(char *src, int ss, int num, void* buff);
void main()
{
struct boot b;
ReadSector("\\\\.\\A:", 0, 1, &b);
printf("\nBoot sector Name: %s\n", b.bsOemName);
printf("Bytes per sector: %d\n", b.bytesperSector);
printf("Sectors per Cluster: %d\n", b.sectorpercluster);
printf("Total Sectors: %d\n", b.totalSectors);
}
void ReadSector(char *src, int ss, int num, void* buff)
{
HANDLE h; //HANDLE is a typedef of void *HANDLE
unsigned int br;
h = CreateFile(src, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
DWORD dw = GetLastError();
printf("\nLast Error: %d", dw);
if (h != NULL)
{
printf("\nError reading floppy disk '%s'", src);
printf("\nReturn value for handle = %d", h);
}
else
{
printf("\nSuccess..");
}
SetFilePointer(h, (ss * 512), NULL,FILE_BEGIN);
ReadFile(h, buff, num, &br, NULL);
CloseHandle(h);
}
Выход/Ошибка:
C:\Users\IEUser\Desktop>Hardware.exe
Last Error: 2
Error reading floppy disk '\\.\A:'
Return value for handle = -1
Boot sector Name:
Bytes per sector: 14336
Sectors per Cluster: 248
Total Sectors: 0
Код ошибки возвращается из системы 2: Система не может найти указанный файл.
Поскольку он не может открыть флоппи-дисковод, переменные структуры хранят значения мусора.
Может кто-нибудь помочь?
Вставить ошибку как _text_ пожалуйста. –
Я уверен, что «A:» не является именем устройства. Найдите свой диск в Диспетчере устройств и попробуйте другие другие «имена», перечисленные для этого устройства. Существуют также некоторые ограничения, перечисленные в [документации] (https://msdn.microsoft.com/en-us/library/windows/desktop/aa363858 (v = vs.85) .aspx) для доступа к гибким дискам; например, вы в настоящее время не используете 'FILE_SHARE_WRITE', но похоже, что вы должны. –
Обратите внимание, что в [документации] (https://msdn.microsoft.com/en-us/library/windows/desktop/aa363858 (v = vs.85) .aspx) говорится: «При открытии тома или гибкого диска, параметр dwShareMode должен иметь FILE_SHARE_WRITEflag. " – nos