我有配置了软盘驱动器(A :)的Windows 7虚拟机。我正尝试将软盘驱动器的引导扇区读入结构中。但是,每次运行此程序时,都无法找到软盘驱动器。我可以确认它可以访问。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_WRITE标志。“ – nos