【问题标题】:QueryChangesVirtualDisk() is returning Access_Denied (5)?QueryChangesVirtualDisk() 正在返回 Access_Denied (5)?
【发布时间】:2018-11-21 05:56:31
【问题描述】:
// 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);
}

最近我们开始使用新的弹性变更跟踪 (RCT 2016) API。我们正面临 QueryChangesVirtualDisk API 的问题。我们按照 MSDN 中提到的步骤进行操作。如果它对他们有用,有人有什么建议吗?

【问题讨论】:

标签: c++ virtual-machine backup wmi access-denied


【解决方案1】:
    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)(文件正在处理中)。
怎么回事?!我觉得很累,很累。

【讨论】:

  • 有人关注这个问题吗?
  • 有人关注这个问题吗?
猜你喜欢
  • 2018-09-09
  • 2020-05-28
  • 2018-12-01
  • 2020-12-01
  • 1970-01-01
  • 2013-08-24
  • 2023-04-08
  • 2011-03-30
  • 1970-01-01
相关资源
最近更新 更多