3702|6

69

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

格式化分区的问题 [复制链接]

运行到pfnFormatVolume(hPart, NULL,  &pfo, NULL, NULL)后, 就停在这了。
重启后发现分区Part01里的内容已经清空。pfnFormatVolume出不来会是什么原因?
代码帖上来了:

void CFormatDlg::OnFormat()
{
        // TODO: Add your control notification handler code here
        HANDLE hStore = OpenStore(L"DSK1:");
        if(hStore==INVALID_HANDLE_VALUE)
        {
                return;
        }

        HANDLE hPart = OpenPartition(hStore, L"Part01");
        if(hPart==INVALID_HANDLE_VALUE)
        {
                return;
        }

        CloseHandle(hStore);
        FORMAT_OPTIONS pfo;
        pfo.dwClusSize=0;
        pfo.dwRootEntries=512;
        pfo.dwFatVersion=16;
        pfo.dwNumFats=2;
        pfo.dwFlags=FATUTIL_FULL_FORMAT;

        HINSTANCE hUtilDll = LoadLibrary (TEXT("FATUTIL.DLL"));  
        if(hUtilDll==NULL)
        {
                return;
        }
       
        PFN_MY_FORMAT_VOLUME pfnFormatVolume = (PFN_MY_FORMAT_VOLUME)GetProcAddress(hUtilDll, TEXT("FormatVolume"));
        if(pfnFormatVolume==NULL)
        {
                return;
        }

        DismountPartition(hPart);
        if(pfnFormatVolume(hPart, NULL,  &pfo, NULL, NULL)!=ERROR_SUCCESS)
        {
                return;
        }

        MountPartition(hPart);
        CloseHandle(hPart);

        return;       
}

最新回复

原因出在 pfo.dwFlags=FATUTIL_FULL_FORMAT; 改成快速格式化,pfo.dwFlags=0;  就OK了 FATUTIL_FULL_FORMAT为什么不行?不懂,是不是耗时太多? 懂的朋友说一下啊  详情 回复 发表于 2009-12-30 18:16
点赞 关注

回复
举报

62

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
[code]#include "stdafx.h"
#include
#include
#include
#include
#include
#include
//#include
//#include

int wmain()
{
    STOREINFO StoreInfo = {0};
    PARTINFO PartInfo = {0};
    HANDLE hFirstStore,hStore,hPart;
    HINSTANCE hFatUtil = NULL;
    BOOL hDismount = FALSE;//, CPart,hPartition,
    BOOL hMount = FALSE;

    FORMAT_PARAMS fp = {0};
    FORMAT_OPTIONS pfo = {0};
    DWORD dwClusSize = 0;
    DWORD dwFatVersion = 16;

    typedef DWORD ( *PFN_MY_FORMATVOLUME)
        (HANDLE hVolume,PDISK_INFO pdi, PFORMAT_OPTIONS pfo, PFN_PROGRESS pfnProgress,PFN_MESSAGE pfnMessage);

    StoreInfo.cbSize = sizeof(StoreInfo);
    hFirstStore = FindFirstStore( &StoreInfo );

    if(!(hFirstStore ))
    {
        RETAILMSG(1, (TEXT("Error FindFirstStore\r\n")));

    }

    FindNextStore(hFirstStore,&StoreInfo);
    FindNextStore(hFirstStore,&StoreInfo);
    FindNextStore(hFirstStore,&StoreInfo);

    hFatUtil = LoadLibrary(L"fatutil.dll");

    PFN_MY_FORMATVOLUME pfnFormatVolume = NULL ;

    pfnFormatVolume = (PFN_MY_FORMATVOLUME)GetProcAddress(hFatUtil, TEXT( "FormatVolume"));
    if (!pfnFormatVolume )
    {
        RETAILMSG(1, (TEXT("Error pfnFormatVolumeEx\r\n")));
    }

    hStore = OpenStore(StoreInfo.szDeviceName);
    hPart = OpenPartition(hStore,L"Part00");

    hDismount = DismountPartition(hPart);
    if(!hDismount)
    {
        RETAILMSG(1, (TEXT("Error DismountStore\r\n")));
    }

    if(ERROR_SUCCESS != pfnFormatVolume(hPart, NULL, NULL, NULL, NULL))
    {
        RETAILMSG(1, (TEXT("Error pfnFormatVolumeEx\r\n")));
    }

    PartInfo.cbSize = (DWORD)StoreInfo.snBiggestPartCreatable;
    //PartInfo.szPartitionName = L"Part00";

    hDismount = CreatePartition(hStore, L"Part00", PartInfo.cbSize);
    if(!hDismount)
    {
        RETAILMSG(1, (TEXT("Error CreatePartitionEx\r\n")));
    }

    hMount = MountPartition(hPart);
    if(!( hMount ))
    {
        RETAILMSG(1, (TEXT("Error OpenStore\r\n")));
    }

return 0;
}

楼主可以参考下,具体没研究,但是本段有个CreatePartition
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
顶起来
非常想了解一下
这方面的东西
——————————————————————————
JOYZML(菜鸟朱铭雷)
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

4
 
jjyyhema的代码运行得很顺畅
谢谢啊!
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

5
 
找到原因了
我的:
typedef DWORD (*PFN_MY_FORMAT_VOLUME)(HANDLE hVolume, PDISK_INFO pdi, PFORMAT_OPTIONS pfo, PFN_PROGRESS pfnProgress, PFN_PROGRESS pfnMessage);

jjyyhema的:
typedef DWORD ( *PFN_MY_FORMATVOLUME)(HANDLE hVolume, PDISK_INFO pdi, PFORMAT_OPTIONS pfo, PFN_PROGRESS pfnProgress, PFN_MESSAGE pfnMessage);

最后一个参数我没写对

CreatePartition出错:Error CreatePartitionEx
还是不用CreatePartition好了,呵呵。
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

6
 
mark
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

7
 
原因出在
pfo.dwFlags=FATUTIL_FULL_FORMAT;
改成快速格式化,pfo.dwFlags=0;  就OK了

FATUTIL_FULL_FORMAT为什么不行?不懂,是不是耗时太多?
懂的朋友说一下啊
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表