| 4553 | |
| 4554 | |
| 4555 | BOOL |
| 4556 | Ext2SymLinkRemoval(CHAR drvLetter) |
| 4557 | { |
| 4558 | HANDLE hMountMgr = NULL; |
| 4559 | |
| 4560 | NT::IO_STATUS_BLOCK iosb; |
| 4561 | NT::NTSTATUS status; |
| 4562 | DWORD rc = 0; |
| 4563 | |
| 4564 | WCHAR buffer[MAX_PATH], *dosName; |
| 4565 | PMOUNTMGR_MOUNT_POINT pmp = NULL; |
| 4566 | PMOUNTMGR_MOUNT_POINTS pms = NULL; |
| 4567 | |
| 4568 | memset(buffer, 0, sizeof(WCHAR) * MAX_PATH); |
| 4569 | pmp = (PMOUNTMGR_MOUNT_POINT) buffer; |
| 4570 | pmp->SymbolicLinkNameOffset = sizeof(MOUNTMGR_MOUNT_POINT); |
| 4571 | pmp->SymbolicLinkNameLength = 14 * sizeof(WCHAR); |
| 4572 | |
| 4573 | dosName = (WCHAR *) (pmp + 1); |
| 4574 | swprintf_s(dosName, MAX_PATH - sizeof(MOUNTMGR_MOUNT_POINT), |
| 4575 | L"\\DosDevices\\%c:\0", drvLetter); |
| 4576 | |
| 4577 | status = Ext2Open("\\Device\\MountPointManager", &hMountMgr, EXT2_DESIRED_ACCESS); |
| 4578 | if (!NT_SUCCESS(status)) { |
| 4579 | goto errorout; |
| 4580 | } |
| 4581 | |
| 4582 | status = NT::ZwDeviceIoControlFile( |
| 4583 | hMountMgr, NULL, NULL, NULL, &iosb, |
| 4584 | IOCTL_MOUNTMGR_DELETE_POINTS, |
| 4585 | (PVOID)pmp, sizeof(WCHAR) * MAX_PATH, |
| 4586 | (PVOID)pmp, sizeof(WCHAR) * MAX_PATH |
| 4587 | ); |
| 4588 | |
| 4589 | if (!NT_SUCCESS(status)) { |
| 4590 | goto errorout; |
| 4591 | } |
| 4592 | |
| 4593 | errorout: |
| 4594 | |
| 4595 | Ext2Close(&hMountMgr); |
| 4596 | return NT_SUCCESS(status); |
| 4597 | } |
| 4598 | |
| 4599 | BOOL |
| 4600 | Ext2SetVolumeMountPoint ( |
no test coverage detected