+ // 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