Hello,
I developped my virtualdisk and the function setvolumemountpoint fail with error 87.
The ioctl function ‘IOCTL_MOUNTDEV_QUERY_DEVICE_NAME’ return the name of my driver.
Can you help please ?
Sample code user debugging :
* 1. HANDLE hDevice;
-
-
wchar_t szDeviceName[512];
-
-
-
wcscpy_s(szDeviceName,L"\\\\?\\Volume{cd4cfca8-484c-8042-550e-916f0206fb8f}");
-
-
-
-
-
BYTE byBuffer[1024];
-
-
-
-
PMOUNTDEV_NAME pMountDevName;
-
-
-
-
hDevice = CreateFile(szDeviceName, FILE_GENERIC_READ | FILE_GENERIC_WRITE,
-
-
-
FILE_SHARE_READ | FILE_SHARE_WRITE,
-
-
-
NULL, OPEN_EXISTING, 0, NULL);
-
-
-
if (hDevice == INVALID_HANDLE_VALUE)
-
-
-
return 1;
-
-
-
-
ULONGLONG lw = 0;
-
-
-
DWORD cbBytesReturned = 0;
-
-
-
-
int err;
-
-
-
DISK_GEOMETRY diskg;
-
-
-
-
BOOL bSuccess = DeviceIoControl(hDevice,
-
-
-
IOCTL_DISK_UPDATE_DRIVE_SIZE,
-
-
-
NULL, 0,
-
-
-
(LPVOID)&diskg, sizeof(diskg),//sizeof(byBuffer),
-
-
-
&cbBytesReturned,
-
-
-
(LPOVERLAPPED)NULL);
-
-
-
err = GetLastError();
-
-
-
bSuccess = DeviceIoControl(hDevice,
-
-
-
IOCTL_DISK_GET_LENGTH_INFO,
-
-
-
NULL, 0,
-
-
-
(LPVOID)&lw, 8,//sizeof(byBuffer),
-
-
-
&cbBytesReturned,
-
-
-
(LPOVERLAPPED)NULL);
-
-
-
-
err = GetLastError();
-
-
-
-
-
STORAGE_DEVICE_NUMBER storageDeviceNumber;
-
-
-
bSuccess = DeviceIoControl(hDevice,
-
-
-
IOCTL_STORAGE_GET_DEVICE_NUMBER,
-
-
-
NULL, 0,
-
-
-
(LPVOID)&storageDeviceNumber, sizeof(storageDeviceNumber),//sizeof(byBuffer),
-
-
-
&cbBytesReturned,
-
-
-
(LPOVERLAPPED)NULL);
-
-
-
err = GetLastError();
-
-
-
-
PARTITION_INFORMATION_EX ts = { 0 };
-
-
-
-
bSuccess = DeviceIoControl(hDevice,
-
-
-
IOCTL_DISK_GET_PARTITION_INFO_EX,
-
-
-
NULL, 0,
-
-
-
(LPVOID)&ts, sizeof(ts),//sizeof(byBuffer),
-
-
-
&cbBytesReturned,
-
-
-
(LPOVERLAPPED)NULL);
-
-
-
-
err = GetLastError();
-
-
-
-
-
bSuccess = DeviceIoControl(hDevice,
-
-
-
IOCTL_MOUNTDEV_QUERY_DEVICE_NAME,
-
-
-
NULL, 0,
-
-
-
(LPVOID)byBuffer,100,//sizeof(byBuffer),
-
-
-
&cbBytesReturned,
-
-
-
(LPOVERLAPPED)NULL);
-
-
-
err = GetLastError();
-
-
-
pMountDevName = (PMOUNTDEV_NAME)byBuffer;
-
-
-
printf("\n%.*ls\n", pMountDevName->NameLength / sizeof(WCHAR),
-
-
-
pMountDevName->Name);
-
-
-
bSuccess = CloseHandle(hDevice);
-
-
code for mounting drive into empty directory which fail with error 87.
-
- wcscpy_s(szUniqueVolumeName, L"\\?\Volume{cd4cfca8-484c-8042-550e-916f0206fb8f}\");
-
-
BOOL b=SetVolumeMountPoint(L"c:\\mnt2\\", szUniqueVolumeName);
-
The name volume disk is correct THEN why SetVolumeMountPoint don’t work !.
Thank for solve this problem !