| 4597 | } |
| 4598 | |
| 4599 | BOOL |
| 4600 | Ext2SetVolumeMountPoint ( |
| 4601 | CHAR * dosPath, |
| 4602 | CHAR * devName |
| 4603 | ) |
| 4604 | { |
| 4605 | HANDLE hMountMgr; |
| 4606 | |
| 4607 | NT::IO_STATUS_BLOCK iosb; |
| 4608 | NT::NTSTATUS status; |
| 4609 | DWORD rc = 0; |
| 4610 | |
| 4611 | CHAR dosDevice[MAX_PATH]; |
| 4612 | WCHAR volPath[MAX_PATH]; |
| 4613 | WCHAR devPath[MAX_PATH]; |
| 4614 | |
| 4615 | PMOUNTMGR_CREATE_POINT_INPUT mcpi = NULL; |
| 4616 | |
| 4617 | USHORT lmcpi = 0, lvolp = 0, ldevp = 0; |
| 4618 | |
| 4619 | memset(dosDevice, 0, MAX_PATH); |
| 4620 | memset(volPath, 0, MAX_PATH * sizeof(WCHAR)); |
| 4621 | memset(devPath, 0, MAX_PATH * sizeof(WCHAR)); |
| 4622 | |
| 4623 | /* covert names to unicode */ |
| 4624 | sprintf(dosDevice, "\\DosDevices\\%c:", toupper(dosPath[0])); |
| 4625 | Ext2AnsiToUnicode(dosDevice, volPath, MAX_PATH); |
| 4626 | Ext2AnsiToUnicode(devName, devPath, MAX_PATH); |
| 4627 | |
| 4628 | ldevp = (USHORT)wcslen(devPath) * 2; |
| 4629 | lvolp = (USHORT)wcslen(volPath) * 2; |
| 4630 | lmcpi = sizeof(MOUNTMGR_CREATE_POINT_INPUT) + lvolp + ldevp; |
| 4631 | |
| 4632 | /* initialize MMGR_CREATE_MOUNT_POINT_INPUT */ |
| 4633 | mcpi = (PMOUNTMGR_CREATE_POINT_INPUT) malloc(lmcpi); |
| 4634 | if (mcpi == NULL) { |
| 4635 | status = STATUS_UNSUCCESSFUL; |
| 4636 | goto errorout; |
| 4637 | } |
| 4638 | |
| 4639 | mcpi->SymbolicLinkNameOffset = sizeof(MOUNTMGR_CREATE_POINT_INPUT); |
| 4640 | mcpi->SymbolicLinkNameLength = lvolp; |
| 4641 | mcpi->DeviceNameOffset = mcpi->SymbolicLinkNameOffset + lvolp; |
| 4642 | mcpi->DeviceNameLength = ldevp; |
| 4643 | |
| 4644 | memcpy((PCHAR)mcpi + mcpi->SymbolicLinkNameOffset, |
| 4645 | volPath, lvolp); |
| 4646 | memcpy((PCHAR)mcpi + mcpi->DeviceNameOffset, |
| 4647 | devPath, ldevp); |
| 4648 | |
| 4649 | /* open MountMgr */ |
| 4650 | status = Ext2Open("\\Device\\MountPointManager", &hMountMgr, EXT2_DESIRED_ACCESS); |
| 4651 | if (!NT_SUCCESS(status)) { |
| 4652 | goto errorout; |
| 4653 | } |
| 4654 | |
| 4655 | /* ioctl .... */ |
| 4656 | status = NT::ZwDeviceIoControlFile( |
nothing calls this directly
no test coverage detected