简易软盘镜像工具的实现及操作系统编写初步
2007-03-15 21:54:13 来源:WEB开发网核心提示: 基本原理是读取生成的镜像文件,然后把其写入软盘启动器A中, 具体的代码请参考(省略了部分不关键代码)://写镜像文件到软驱UINT FuncWriteFlopy(LPVOID pDialog){//begin显示设置省略…int nTotalBlocks = 80*18*2;
基本原理是读取生成的镜像文件,然后把其写入软盘启动器A中, 具体的代码请参考(省略了部分不关键代码):
//写镜像文件到软驱
UINT FuncWriteFlopy(LPVOID pDialog)
{
//begin显示设置
省略…
int nTotalBlocks = 80*18*2;
//1.打开A驱动器
HANDLE hFile = CreateFile(_T("\\.\A:"),
GENERIC_WRITE,
FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
0,
NULL);
if(hFile==NULL)
{
sOut = _T("不能打开驱动器A");//…
return -1;
}
PBYTE pBuffer = (PBYTE)malloc(BlOCKSIZE);
if(pBuffer==NULL)
{
sOut = _T("开辟内存空间失败!");//…
return -1;
}
memset(pBuffer,0,BlOCKSIZE);
//2.打开镜像文件
CFile fInFile;
BOOL b = fInFile.Open(pCurDlg->m_ImgFileName, CFile::modeRead);
if(!b)
{
sOut.Format(_T("不能打开镜像文件%s!"),pCurDlg->m_ImgFileName);
…
return -1;
}
//3.分块写入镜像文件
DWORD dwImgLen = fInFile.GetLength();
for(int i=0;i<nTotalBlocks;i++)
{
DWORD dwLen=0;
fInFile.Read(pBuffer, BlOCKSIZE);
WriteFile(hFile, pBuffer, BlOCKSIZE, &dwLen, NULL);
#ifndef ADISKMODE
if((DWORD)((i+1)*BlOCKSIZE)>=dwImgLen) break;//镜像文件写入完毕
#endif
if(dwLen!=BlOCKSIZE)
{
sOut.Format(_T("写入镜像文件%s失败,请检查软驱!"),pCurDlg->m_ImgFileName);
//…
return -1;
}
pProgCtrl->SetPos((int)(i*100/nTotalBlocks));
}
//4.关闭文件
fInFile.Close();
CloseHandle(hFile);
free(pBuffer);
//end 显示设置
pProgCtrl->SetPos(100);
sOut.Format(_T("镜像文件%s写入软驱成功!"),pCurDlg->m_ImgFileName);
//…
return 0;
}
4、操作系统编写
更多精彩
赞助商链接