以下のようなパーティション構成で,[Win95-DOS]領域についている隠し属性を解除したいと思っていますが,なかなかうまくいきません。
どなたかご助言を頂ければ助かります。
[Win2K(NTFS)][Win95-DOS(FAT16/Hidden)][NoOS(FAT16)]
DisableHiiddenPartition.cpp:
---------------------------------------
char cDrivePath[] = "\\\\?\\F:";
hVolume = CreateFile( (LPCTSTR)cDrivePath, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
if ( hVolume )
{
DWORD dwBytesReturned = 0;
PARTITION_INFORMATION PartInfo;
if ( DeviceIoControl(hVolume, IOCTL_DISK_GET_PARTITION_INFO, NULL, 0, &PartInfo, sizeof(PartInfo), &dwBytesReturned, NULL) )
{
// ボリュームが隠しパーティションか確認
char cPartInfoTypeHidden[3] = { NULL } ;
sprintf(cPartInfoTypeHidden, "%02x", PartInfo.PartitionType);
if ( cPartInfoTypeHidden[0] == '1' )
{
if ( ( cPartInfoTypeHidden[1] == '1' ) // FAT12
|| ( cPartInfoTypeHidden[1] == '4' ) // FAT16
|| ( cPartInfoTypeHidden[1] == '6' ) // FAT16B
|| ( cPartInfoTypeHidden[1] == '7' ) // HPFS(NTFS)
|| ( cPartInfoTypeHidden[1] == 'B' ) // FAT32
|| ( cPartInfoTypeHidden[1] == 'C' ) // FAT32X
|| ( cPartInfoTypeHidden[1] == 'E' ) // FAT16X
)
{
// パーティションの隠し属性を解除
SET_PARTITION_INFORMATION SetPartInfo;
cPartInfoTypeHidden[0] = '0';
SetPartInfo.PartitionType = atoi(cPartInfoTypeHidden);
bDiskDeviceInfo = DeviceIoControl(hVolume, IOCTL_DISK_SET_PARTITION_INFO, &SetPartInfo, sizeof(SetPartInfo), NULL, 0, &dwBytesReturned, NULL);
if ( bDiskDeviceInfo )
{
return 0;
}
}
}
}
}
return 1;
すみません。自己解決しました。
ツイート | ![]() |