硬碟低階格式化的研究 (轉)
盤低階格式化的研究
#include
#include
#include
#include
BOOL GetDiskGeometry(HANDLE hDisk,PDISK_GEOMETRY lpGeometry )
{
D ReturneyteCount;
return DeviceIoControl(
hDisk,
IOCTL_DISK_GET_DRIVE_GEOMETRY,
NULL,
0,
lpGeometry,
sizeof(*lpGeometry),
&ReturnedByteCount,
NULL
);
}
DWORD GetSupportedGeometrys(
HANDLE hDisk
)
{
DWORD ReturnedByteCount;
BOOL b;
DWORD NumberSupported;
b = DeviceIoControl(
hDisk,
IOCTL_DISK_GET_MEDIA_TYPES,
NULL,
0,
SupportedGeometry,
sizeof(SupportedGeometry),
&ReturnedByteCount,
NULL
);
if ( b ) {
NumberSupported = ReturnedByteCount / sizeof(DISK_GEOMETRY);
}
else {
NumberSupported = 0;
}
SupportedGeometryCount = NumberSupported;
return NumberSupported;
}
BOOL LowLevelFormat(HANDLE hDisk,PDISK_GEOMETRY lpGeometry )
{
FORMAT_PARAMETERS FormatParameters;
PBAD_TRACK_NUMBER lpBadTrack;
UINT i;
BOOL b;
DWORD ReturnedByteCount;
FormatParameters.MediaType = lpGeometry->MediaType;
FormatParameters.StartHeadNumber = 0;
FormatParameters.EndHeadNumber = lpGeometry->TracksPerCylinder - 1;
lpBadTrack = (PBAD_TRACK_NUMBER) LocalAlloc(LMEM_ZEROINIT,lpGeometry->TracksPerCylinder*sizeof(*lpBadTrack));
for (i = 0; i < lpGeometry->Cylinders.LowPart; i++) {
FormatParameters.StartCylinderNumber = i;
FormatParameters.EndCylinderNumber = i;
b = DeviceIoControl(
hDisk,
IOCTL_DISK_FORMAT_TRACKS,
&FormatParameters,
sizeof(FormatParameters),
lpBadTrack,
lpGeometry->TracksPerCylinder*sizeof(*lpBadTrack),
&ReturnedByteCount,
NULL
);
if (!b ) {
LocalFree(lpBadTrack);
return b;
}
}
LocalFree(lpBadTrack);
return TRUE;
}
BOOL LockVolume( HANDLE hDisk )
{
DWORD ReturnedByteCount;
return DeviceIoControl(
hDisk,
FSCTL_LOCK_VOLUME,
NULL,
0,
NULL,
0,
&ReturnedByteCount,
NULL
);
}
BOOL UnlockVolume( HANDLE hDisk )
{
DWORD ReturnedByteCount;
return DeviceIoControl(
hDisk,
FSCTL_UNLOCK_VOLUME,
NULL,
0,
NULL,
0,
&ReturnedByteCount,
NULL
);
}
BOOL DismountVolume( HANDLE hDisk )
{
DWORD ReturnedByteCount;
return DeviceIoControl(
hDisk,
FSCTL_DISMOUNT_VOLUME,
NULL,
0,
NULL,
0,
&ReturnedByteCount,
NULL
);
}
單sample.
HANDLE hDiskImage;
DISK_GEOMETRY Geometry;
HANDLE hDevice; // handle to the drive to be examined
DISK_GEOMETRY SupportedGeometry[20];
DWORD SupportedGeometryCount;
hDevice = CreateFile(".PhysicalDrive0", // drive to open
0, // don't need any access to the drive
FILE_SHARE_READ | FILE_SHARE_WRITE, // share mode
NULL, // default security attributes
OPEN_EXISTING, // disposition
0, // file attributes
NULL); // don't copy any file's attributes
if (hDevice == INVALID_HANDLE_VALUE) { // if we can't open the drive...
MessageBox("開啟裝置錯誤");
}
if ( LockVolume(hDrive) == FALSE ) {
MessageBox("Locking volume failed );
ExitProcess(1);
}
if ( !GetDiskGeometry(hDrive,&Geometry) ) {
MessageBox("GetDiskGeometry failed");
ExitProcess(1);
}
GetSupportedGeometrys(hDrive);
for(i=0;i
}
DismountVolume(hDrive);
UnlockVolume(hDrive);
ExitProcess(0);
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-991591/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 當心!HTML檔案也能格式化硬碟(轉)HTML硬碟
- 被格式化的硬碟檔案能恢復嗎,三步恢復格式化硬碟硬碟
- 行動硬碟-行動硬碟提示格式化的解決辦法硬碟
- 硬碟格式化後資料能不能恢復,硬碟格式化資料怎麼恢復硬碟
- x->0時,高階+低階等價於低階?為什麼
- 從已格式化硬碟救回刪除的資料硬碟
- 硬碟格式化時如何選擇?硬碟格式FAT32、NTFS、exFAT的區別硬碟
- XML和Java: 低階或高階的 XML API?XMLJavaAPI
- java -- 低階失誤Java
- 硬碟被格式化後真的可以恢復嗎?硬碟
- SellCell:研究發現Pixel 7裝置的轉售價格比iPhone 14低48% Galaxy S23低40%iPhone
- linux平臺用fdisk分割槽格式化硬碟Linux硬碟
- Linux下新增硬碟,分割槽,格式化詳解Linux硬碟
- 五萬 Minecraft 使用者感染了格式化硬碟的惡意程式Raft硬碟
- 求高人指引低階新手,求職求職
- 讀Ext之四(事件的低階封裝)事件封裝
- 不小心格式化後可行動硬碟怎麼找到硬碟
- 批處理-快速格式化硬碟(全自動進行)硬碟
- 對新硬碟分割槽格式化步驟和內容硬碟
- 重灌系統時硬碟無法格式化怎麼辦硬碟
- 低階程式設計師和高階程式設計師的區別程式設計師
- 行動硬碟被格式化了?可以這樣恢復資料硬碟
- linux掛載新硬碟並進行分割槽格式化Linux硬碟
- FreeBSD 的硬碟分割槽策略(轉)硬碟
- FreeBSD對硬碟容量的要求(轉)硬碟
- 我的硬碟空間哪去了?(轉)硬碟
- 硬碟提示格式化怎麼辦?硬碟提示檔案或目錄損壞且無法讀取?硬碟
- 硬碟簡單加密. (轉)硬碟加密
- 硬碟加密--解析二 (轉)硬碟加密
- 硬碟加密----解析三 (轉)硬碟加密
- 雙硬碟問題(轉)硬碟
- 硬碟安裝 Mandriva(轉)硬碟
- 《D程式設計語言》中的低階錯誤程式設計
- 京東數科研究院高階研究員龔謹:網際網路企業的“轉基因革命”開啟:如何玩轉to B?
- 硬碟使用驅動器中的光碟之前需要將其格式化修復方法?硬碟
- main()的研究方法 (轉)AI
- 老機的Linux硬碟規劃(轉)Linux硬碟
- suse 10 硬碟安裝(轉)硬碟