如下代码经本人改写并验证成功。
注意:需要用到微软的API库"Storeapi.lib"和“storemgr.lib”。
- #include "stdafx.h"
- #include <windows.h>
- #include <commctrl.h>
- #include <Storemgr.h>
- #include <formatdisk.h>
- #include <fatutil.h>
- #include <Bootpart.h>
-
-
-
- int wmain()
- {
- STOREINFO StoreInfo = {0};
- PARTINFO PartInfo = {0};
- HANDLE hFirstStore,hStore,hPart;
- HINSTANCE hFatUtil = NULL;
- BOOL hDismount = FALSE;
- 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;
-
-
- 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;
- }
本文参考自http://bbs.driverdevelop.com/htm_data/48/0711/107241.html
(秩名) |