📄 bdtlinfo.c
字号:
#include "bdtlinfo.h"
#include "saftl.h"
FLStatus DINFO_BDTL(EXBYTE handle)
{
IOreq ioreq;
FLStatus Status = flOK;
FLStatus MountStatus = flOK;
EXBYTE part_cnt,noOfVolumes;
VolumeInfoRecord volInfo;
EXDWORD capacity;
FLExtendedDiskInfo info;
ioreq.irHandle = handle;
DinfoPrint( EX_TEXT("\n BDTL (DISK) INFO.\n") );
ExPrintLine( 18 );
Status = DINFO_flCountVolumes(&ioreq);
if(STATUS_OK)
{
noOfVolumes = ioreq.irFlags;
if (noOfVolumes>1)
DinfoPrint( EX_TEXT("The Media is divided to %d disk-partitions\n\n"),noOfVolumes );
else
DinfoPrint( EX_TEXT("There is only one disk-partition\n\n") );
}
else
{
DinfoPrint( EX_TEXT("Can't Count Volumes on Socket %d (with status %s)\n"),handle,TranslateFLStatus(Status) );
return Status;
}
for (part_cnt=0;part_cnt<noOfVolumes;part_cnt++)
{
DinfoPrint( EX_TEXT("BDTL Partition No. %d information:\n"),part_cnt);
/*******************************/
/* Print the protection Status */
/*******************************/
DinfoPrint( EX_TEXT(" Protection Status : "));
ioreq.irHandle = handle | (part_cnt<<4) ;
Status = DINFO_flIdentifyProtection(&ioreq);
switch(Status)
{
case flOK:
PrintProtectionType((EXWORD)ioreq.irFlags);
break;
case flNotProtected:
case flFeatureNotSupported:
DinfoPrint( EX_TEXT("Not Protected\n"));
Status = flOK;
break;
default:
DinfoPrint( EX_TEXT("Failed getting protection information (with status %s)\n"),TranslateFLStatus(Status) );
return Status;
}
/**************************/
/* Try mounting the media */
/**************************/
ioreq.irHandle = handle | (part_cnt<<4) ;
Status = flMountVolume(&ioreq);
if(STATUS_OK)
{
DinfoPrint( EX_TEXT(" Format Type : Fat Format\n"));
Status = DINFO_flAbsMountVolume(&ioreq); /* to know if partition is formated */
if(Status != flOK)
{
DinfoPrint( EX_TEXT("\n Error - failed in abs mount after full mount (with status %s)\n"),TranslateFLStatus(Status) );
return Status;
}
}
else /* No FAT format present , H/W PROTECTED or bad format */
{
Status = DINFO_flAbsMountVolume(&ioreq); /* to know if partition is formated */
if (Status==flHWProtection)
{
DinfoPrint( EX_TEXT("\nMedia is HW protected and can not be mounted\n"));
MountStatus = flHWProtection;
Status = flOK; /* so we will continue to process '/' after we get out from here */
}
/* There are 2 posibilities of failure: flHWProtection or None Fat Format */
if(MountStatus != flHWProtection)
{
DinfoPrint( EX_TEXT(" Format Type : None Fat Format\n"));
}
}
ioreq.irHandle = handle | (part_cnt<<4) ;
ioreq.irData = &volInfo;
Status = DINFO_flVolumeInfo(&ioreq);
if(STATUS_OK)
{
capacity = (unsigned long)(((unsigned long)volInfo.cylinders)* ((unsigned long)volInfo.heads)* ((unsigned long)volInfo.sectors)*((unsigned long)FL_SECTOR_SIZE));
DinfoPrint( EX_TEXT(" Size : %lu Bytes (%.1f MB)\n"),capacity,(float)capacity/EXMBYTE);
DinfoPrint( EX_TEXT(" Sectors : %ld\n"),volInfo.sectors);
DinfoPrint( EX_TEXT(" Heads : %ld\n"),volInfo.heads);
DinfoPrint( EX_TEXT(" Cylinders : %ld\n"),volInfo.cylinders);
DinfoPrint( EX_TEXT(" Virtual Sectors : %ld\n"),volInfo.logicalSectors);
}
else if (Status==flNotMounted)
{
Status = flOK;
MountStatus = flHWProtection;
}
if( Option.Extraflag )
{
/*****************************************************/
/* Get info on partition using flGetExtendedDiskInfo */
/*****************************************************/
info.dwStructSize = sizeof(info);
ioreq.irData = &info;
ioreq.irLength = FL_ALL_FLOORS;
ioreq.irHandle = handle ;
ioreq.irCount = part_cnt ; /* partition number */
ioreq.irFlags = FL_DISK_PARTITION;
Status = flGetExtendedDiskInfo( &ioreq );
if( Status != flOK )
{
DinfoPrint( EX_TEXT("flGetExtendedDiskInfo failed (with status %s)\n"),TranslateFLStatus(Status) );
return Status;
}
if(MountStatus != flHWProtection)
{
DinfoPrint( EX_TEXT(" Free units : %ld\n"),info.dwFreeUnits );
DinfoPrint( EX_TEXT(" Needed free units : %d\n"),info.bNeededFreeUnits );
DinfoPrint( EX_TEXT(" Sectors for folding : %d\n"),info.bMinSectorsForFolding );
DinfoPrint( EX_TEXT(" Sectors for next write: %d\n"),info.bMinSectorsForNextWrite );
DinfoPrint( EX_TEXT(" Used units : %ld\n"),info.dwUsedUnits );
DinfoPrint( EX_TEXT(" TL unit size : %ld\n"),info.dwTLUnitSize);
}
DinfoPrint( EX_TEXT(" Virtual units : %ld\n"),info.dwVirtualUnits );
DinfoPrint( EX_TEXT(" First Quick Mount unit: %ld\n"),info.dwFirstQuickMountUnit );
DinfoPrint( EX_TEXT(" First unit : %ld\n"),info.dwFirstUnit );
DinfoPrint( EX_TEXT(" Last unit : %ld\n"),info.dwLastUnit );
DinfoPrint( EX_TEXT(" Spare units : %ld\n"),info.dwSpareUnits );
DinfoPrint( EX_TEXT(" Transfer units : %ld\n"),info.dwTransferUnits );
if (info.dwPartitionFlags & SAFTL_BDTL)
DinfoPrint( EX_TEXT(" Partition flags : BDTL \n") );
if (info.dwPartitionFlags & SAFTL_LAST)
DinfoPrint( EX_TEXT(" Partition flags : LAST \n") );
if (info.dwPartitionFlags & SAFTL_QUICK_MOUNT)
DinfoPrint( EX_TEXT(" Partition flags : QUICK MOUNT \n") );
if (info.dwPartitionFlags & SAFTL_ADVANCED_MATCHING)
DinfoPrint( EX_TEXT(" Partition flags : ADVANCED MATCHING \n") );
if (info.dwPartitionFlags & SAFTL_REL_PARTITION)
DinfoPrint( EX_TEXT(" Partition flags : TYPE A PARTITION \n") );
if (info.dwPartitionFlags & SAFTL_FAST_PARTITION)
DinfoPrint( EX_TEXT(" Partition flags : TYPE B PARTITION \n") );
if (info.dwPartitionFlags & SAFTL_NO_MATCHING)
DinfoPrint( EX_TEXT(" Partition flags : TYPE C PARTITION \n") );
/*
if (info.dwPartitionFlags & SAFTL_RUGGEDIZED)
DinfoPrint( EX_TEXT(" Partition flags : RUGGEDIZED \n") );
if (info.dwPartitionFlags & SAFTL_BINARY)
DinfoPrint( EX_TEXT(" Partition flags : BINARY \n") );
*/
} /* End if extra information should be displayed */
} /* End loop over partitions */
DinfoPrint( EX_TEXT("\n"));
if (part_cnt%2)
{
}
return Status;
}
void PrintProtectionType( EXWORD pType )
{
if( pType & PROTECTABLE )
DinfoPrint( EX_TEXT("/Protectable"));
if( pType & READ_PROTECTED )
DinfoPrint( EX_TEXT("/Read Protected"));
if( pType & WRITE_PROTECTED )
DinfoPrint( EX_TEXT("/Write Protected"));
if( pType & LOCK_ENABLED )
DinfoPrint( EX_TEXT("/Lock Enabled"));
if( pType & LOCK_ASSERTED )
DinfoPrint( EX_TEXT("/Lock Asserted"));
if( pType & KEY_INSERTED )
DinfoPrint( EX_TEXT("/Key Inserted"));
if( pType & CHANGEABLE_PROTECTION )
DinfoPrint( EX_TEXT("/Changeable"));
if( pType & OTW_PROTECTED )
DinfoPrint( EX_TEXT("/OTW Protected"));
if( pType & STICKY_LOCK_ASSERTED )
DinfoPrint( EX_TEXT("/Sticky lock active"));
DinfoPrint( EX_TEXT("\n"));
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -