\r
if (!VDS_DeleteAllPartitions(pPhyDrive->PhyDrive))\r
{\r
- Log("Notice: Could not delete partitions: 0x%x", GetLastError());\r
- rc = 1;\r
- goto End;\r
+ Log("Notice: Could not delete partitions: 0x%x, but we continue.", GetLastError());\r
}\r
\r
Log("Deleting all partitions ......................... OK");\r
BOOL ret = FALSE;\r
BYTE *backup = NULL;\r
UINT64 offset;\r
+ BYTE Buffer[512];\r
HANDLE hDrive = INVALID_HANDLE_VALUE;\r
LARGE_INTEGER liCurPosition;\r
LARGE_INTEGER liNewPosition;\r
\r
Log("BackupDataBeforeCleanDisk %d", PhyDrive);\r
\r
+ // step1: check write access\r
+ hDrive = GetPhysicalHandle(PhyDrive, TRUE, TRUE, FALSE);\r
+ if (hDrive == INVALID_HANDLE_VALUE)\r
+ {\r
+ Log("Failed to GetPhysicalHandle for write.");\r
+ goto out;\r
+ }\r
+\r
+ liCurPosition.QuadPart = 2039 * 512;\r
+ liNewPosition.QuadPart = 0;\r
+ if (0 == SetFilePointerEx(hDrive, liCurPosition, &liNewPosition, FILE_BEGIN) ||\r
+ liNewPosition.QuadPart != liCurPosition.QuadPart)\r
+ {\r
+ Log("SetFilePointer1 Failed %u", LASTERR);\r
+ goto out;\r
+ }\r
+ \r
+\r
+ dwSize = 0;\r
+ ret = ReadFile(hDrive, Buffer, 512, &dwSize, NULL);\r
+ if ((!ret) || (dwSize != 512))\r
+ {\r
+ Log("Failed to read %d %u 0x%x", ret, dwSize, LASTERR);\r
+ goto out;\r
+ }\r
+\r
+\r
+ liCurPosition.QuadPart = 2039 * 512;\r
+ liNewPosition.QuadPart = 0;\r
+ if (0 == SetFilePointerEx(hDrive, liCurPosition, &liNewPosition, FILE_BEGIN) ||\r
+ liNewPosition.QuadPart != liCurPosition.QuadPart)\r
+ {\r
+ Log("SetFilePointer2 Failed %u", LASTERR);\r
+ goto out;\r
+ }\r
+\r
+ ret = WriteFile(hDrive, Buffer, 512, &dwSize, NULL);\r
+ if ((!ret) || dwSize != 512)\r
+ {\r
+ Log("Failed to write %d %u %u", ret, dwSize, LASTERR);\r
+ goto out;\r
+ }\r
+\r
+ CHECK_CLOSE_HANDLE(hDrive);\r
+ Log("Write access check success");\r
+\r
+\r
+ //step2 backup 4MB data\r
backup = malloc(SIZE_1MB * 4);\r
if (!backup)\r
{\r
\r
End:\r
\r
+ if (hVolume != INVALID_HANDLE_VALUE)\r
+ {\r
+ bRet = DeviceIoControl(hVolume, FSCTL_UNLOCK_VOLUME, NULL, 0, NULL, 0, &dwSize, NULL);\r
+ Log("FSCTL_UNLOCK_VOLUME bRet:%u code:%u", bRet, LASTERR);\r
+ CHECK_CLOSE_HANDLE(hVolume);\r
+ }\r
+\r
if (rc == 0)\r
{\r
Log("OK");\r