QueryChangesVirtualDisk () возвращает Access_Denied (5)? - PullRequest
0 голосов
/ 21 ноября 2018
// QueryChangesVirtualDisk
PCWSTR    changeTrackingId = virtualDiskInfo->ChangeTrackingState.MostRecentId;
ULONG64   byteOffset = 0L;
ULONG64   byteLength = virtualDiskInfoSize;
PQUERY_CHANGES_VIRTUAL_DISK_RANGE pQueryChangeRange = NULL;
ULONG     rangeCount = 0L;
ULONG64   processedLength = 0L;
openStatus = QueryChangesVirtualDisk(
    vhdHandle,                            // A handle to the open VHD
    changeTrackingId,                     // A pointer to a string that specifies the change tracking identifier
    byteOffset,                           // Specifies the distance from the start of the VHD to the beginning of the area of the VHD
    byteLength,                           // Specifies the length of the area of the VHD that you want to check for changes
    QUERY_CHANGES_VIRTUAL_DISK_FLAG_NONE, // Reserved
    pQueryChangeRange,                    // Indicates the areas of the virtual disk that have changed
    &rangeCount,                          // The number of QUERY_CHANGES_VIRTUAL_DISK_RANGE structures that the array that the Ranges parameter points to can hold
    &processedLength                      // Indicates the total number of bytes that the method processed
);

if (openStatus != ERROR_SUCCESS)
{
    wprintf(L"Failed to call method(QueryChangesVirtualDisk), Erorr code: %ld\n", openStatus);
    wprintf(L"Virtual disk path: %s\n", virtualDiskPath);
    wprintf(L"%s\n", changeTrackingId);
    wprintf(L"Start offset: %llu\n", byteOffset);
    wprintf(L"End offset: %lu\n", virtualDiskInfoSize);
    getchar();
    return 1;
}

cout << "Succeeded to call method(QueryChangesVirtualDisk)." << endl;

if (vhdHandle != NULL)
{
    CloseHandle(vhdHandle);
}

Недавно мы начали использовать новые API отслеживания устойчивых изменений (RCT 2016).Мы столкнулись с проблемой API QueryChangesVirtualDisk.Мы следуем за шагами как упомянуто в MSDN.У кого-нибудь есть предложения, если он работает на них?

1 Ответ

0 голосов
/ 23 ноября 2018
    openStatus = OpenVirtualDisk(
    &storageType,
    virtualDiskPath,
    //VIRTUAL_DISK_ACCESS_GET_INFO,
    VIRTUAL_DISK_ACCESS_ALL,
    OPEN_VIRTUAL_DISK_FLAG_NO_PARENTS,
    openParameters,
    &vhdHandle
);

После моего теста дескриптор открытого виртуального диска изменяется с VIRTUAL_DISK_ACCEES_GET_INFO на VIRTUAL_DISK_ACCESS_ALL , это работает.Но возникает новая проблема: виртуальная машина не может загрузиться или виртуальная машина включена, QueryChangesVirtualDisk () возвращает 32 (0x20) (файл продолжается).
WTF ?!Я чувствую себя очень уставшим, очень.

...