지금은 CreateVirtualDisk 기능을 사용하여 실제 디스크와 가상 디스크 모두에서 VHD를 생성하고 있습니다. 오류로 인해 1 주일 동안 여기에 갇혀 있습니다. 물리적 디스크에서 VHD를 만들려고 할 때 액세스가 거부되었습니다. 나는 항상 관리자 권한으로 프로그램을 실행 했으므로 이론적으로는 효과가 있지만 그렇지 않았다. 나는 여기서 무엇이 잘못되었는지 정말로 모른다.오류 : WIN7에서 'CreateVirtualDisk'기능을 사용할 때 액세스가 거부되었습니다.
현재 VHD의 API 문서를 찾을 수 있습니다
[DllImport("virtdisk.dll", CharSet = CharSet.Unicode)]
public static extern Int32 CreateVirtualDisk(
ref VIRTUAL_STORAGE_TYPE VirtualStorageType,
String Path,
_VIRTUAL_DISK_ACCESS_MASK VirtualDiskAccessMask,
IntPtr SecurityDescriptor,
_CREATE_VIRTUAL_DISK_FLAG Flags,
Int32 ProviderSpecificFlags,
ref CREATE_VIRTUAL_DISK_PARAMETERS Parameters,
IntPtr Overlapped,
ref VirtualDiskSafeHandle Handle);
그리고 :
VHD 내가 도서관 'virtdisk.dll'에서이 메서드를 호출 PInvoke를 사용, 이것은 내가 기능을 정의하는 방법이다
VIRTUAL_STORAGE_TYPE:
o virtualStorageType.DeviceID = VIRTUAL_STORAGE_TYPE_DEVICE_VHD;
o virtualStorageType.VendorID = VIRTUAL_STORAGE_TYPE_VENDOR_MICROSOFT;
PATH: // name of the new VHD file
o m_path = “D:\VirtualDisk\test.vhd”;
VIRTUAL_DISK_ACCESS_MASK:
o virtualDiskAccessMask = VIRTUAL_DISK_ACCESS_MASK.VIRTUAL_DISK_ACCESS_CREATE;
SECURITY_DESCRIPTOR:
o securityDescriptor = IntPtr.Zero;
CREATE_VIRTUAL_DISK_FLAG:
o createVirtualDiskFlag = CREATE_VIRTUAL_DISK_FLAG.CREATE_VIRTUAL_DISK_FLAG_FULL_PHYSICAL_ALLOCATION
ProviderSpecificFlag:
o providerSpecificFlag = 0;
CREATE_VIRTUAL_DISK_PARAMETER:
o m_createVirtualDiskParameters.Version = _CREATE_VIRTUAL_DISK_VERSION.CREATE_VIRTUAL_DISK_VERSION_1;
o m_createVirtualDiskParameters.Version1.UniqueId = Guid.Empty;
o m_createVirtualDiskParameters.Version1.MaximumSize = 0;
o m_createVirtualDiskParameters.Version1.BlockSizeInBytes = 0;
o m_createVirtualDiskParameters.Version1.SectorSizeInByte = VirtualDisk.CREATE_VIRTUAL_DISK_PARAMETERS_DEFAULT_SECTOR_SIZE;
o m_createVirtualDiskParameters.Version1.ParentPath = IntPtr.Zero;
o m_createVirtualDiskParameters.Version1.SourcePath = Marshal.StringToHGlobalAuto(sourcepath);
OVERLAPPED:
o Overlapped = IntPtr.Zero ;
HANDLE:
o handle
:이 같은 모든 매개 변수를 설정
이 내가 오류가 발생하는 방법입니다 원본 경로 = @ "D : \ VirtualDisk \ KarhuBearOS.vhd 기존 가상 디스크의 절대 경로로
- : 617,451,515,
나는 결과는 여기에 많은 문자열 변수 '원본 경로'의 가치와 함께있는 시도 "; 성공!
- 실제 디스크의 절대 경로로 : sourcepath = @ "C : \"; 실패했습니다! 액세스가 거부되었습니다.
- VSS에서 생성 한 볼륨 ID가있는 서비스 : sourcepath = @ "\? \ Volume {a3c3c244-8b7a-11de-a777-806e6f6e6963} \" 실패했습니다! 액세스가 거부되었습니다.
- VSS 서비스에서 생성 한 볼륨 ID의 절대 경로가 sourcepath = @ "\? \ GLOBALROOT \ Device \ HarddiskVolumeShadowCopy30 \" 실패했습니다! 액세스가 거부되었습니다.
이 문제를 해결할 수있는 방법을 알려 주시면 대단히 감사하겠습니다. 최고의
내,
호앙 안 구엔
는이 구성 나를 위해 작동