- # ---- snip ----
- # $ powershell -Command 'Mount-DiskImage -ImagePath "\\10.49.202.230@2049\nfs4\xfstestfs001\test2\vhdtest\v2.img"'
- # Mount-DiskImage : Der angeforderte Vorgang konnte aufgrund einer Dateisystemeinschränkung nicht abgeschlossen werden.
- # In Zeile:1 Zeichen:1
- # + Mount-DiskImage -ImagePath L:\download\debian-12.4.0-amd64-DVD-1.iso
- # + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- # + CategoryInfo : NotSpecified: (MSFT_DiskImage:ROOT/Microsoft/.../MSFT_DiskImage) [Mount-DiskImage], CimException
- # + FullyQualifiedErrorId : HRESULT 0x80070299,Mount-DiskImage
- # ---- snip ----
- diff --git a/daemon/fileinfoutil.c b/daemon/fileinfoutil.c
- index 2556c87..925f537 100644
- --- a/daemon/fileinfoutil.c
- +++ b/daemon/fileinfoutil.c
- @@ -221,7 +221,7 @@ void nfs_to_remote_protocol_info(
- rpi_out->StructureVersion = 4;
- rpi_out->StructureSize = sizeof(FILE_REMOTE_PROTOCOL_INFORMATION);
- - rpi_out->Protocol = WNNC_NET_RDR2SAMPLE; /* FIXME! */
- + rpi_out->Protocol = WNNC_NET_SMB; // WNNC_NET_RDR2SAMPLE; /* FIXME! */
- /* ToDo: Add pNFS info */
- rpi_out->ProtocolMajorVersion = 4;
- diff --git a/daemon/nfs41_superblock.c b/daemon/nfs41_superblock.c
- index eb8a938..92cfeac 100644
- --- a/daemon/nfs41_superblock.c
- +++ b/daemon/nfs41_superblock.c
- @@ -194,6 +194,7 @@ void nfs41_superblock_fs_attributes(
- FsAttrs->FileSystemAttributes |= FILE_SUPPORTS_SPARSE_FILES;
- /* NFSv4 protocol uses Unicode by default */
- FsAttrs->FileSystemAttributes |= FILE_UNICODE_ON_DISK;
- + FsAttrs->FileSystemAttributes |= FILE_SUPPORTS_OBJECT_IDS;
- /* We support |FileCaseSensitiveInformation| to query each dir */
- FsAttrs->FileSystemAttributes |= FILE_SUPPORTS_CASE_SENSITIVE_DIRS;
- @@ -218,8 +219,8 @@ void nfs41_superblock_fs_attributes(
- /* let the driver fill in FileSystemName */
- #if ((NFS41_DRIVER_DEBUG_FS_NAME) == 1)
- - (void)wcscpy(FsAttrs->FileSystemName, L"NFS");
- - FsAttrs->FileSystemNameLength = 3*sizeof(wchar_t);
- + (void)wcscpy(FsAttrs->FileSystemName, L"NTFS");
- + FsAttrs->FileSystemNameLength = 4*sizeof(wchar_t);
- #elif ((NFS41_DRIVER_DEBUG_FS_NAME) == 2)
- (void)wcscpy(FsAttrs->FileSystemName, L"DEBUG-NFS41");
- FsAttrs->FileSystemNameLength = 11*sizeof(wchar_t);
- diff --git a/daemon/volume.c b/daemon/volume.c
- index dbb2431..e836d74 100644
- --- a/daemon/volume.c
- +++ b/daemon/volume.c
- @@ -36,7 +36,7 @@
- /* windows volume queries want size in 'units', so we have to
- * convert the nfs space_* attributes from bytes to units */
- #define SECTORS_PER_UNIT 8
- -#define BYTES_PER_SECTOR 1024
- +#define BYTES_PER_SECTOR 512
- #define BYTES_PER_UNIT (SECTORS_PER_UNIT * BYTES_PER_SECTOR)
- #define TO_UNITS(bytes) (bytes / BYTES_PER_UNIT)
- diff --git a/sys/nfs41sys_fsctl.c b/sys/nfs41sys_fsctl.c
- index c1a3f2b..972792c 100644
- --- a/sys/nfs41sys_fsctl.c
- +++ b/sys/nfs41sys_fsctl.c
- @@ -895,6 +895,24 @@ NTSTATUS nfs41_FsCtl(
- case FSCTL_DUPLICATE_EXTENTS_TO_FILE:
- status = nfs41_DuplicateData(RxContext);
- break;
- + case FSCTL_CREATE_OR_GET_OBJECT_ID:
- + case FSCTL_GET_OBJECT_ID:
- + __notnull XXCTL_LOWIO_COMPONENT *FsCtl =
- + &RxContext->LowIoContext.ParamsFor.FsCtl;
- + __notnull PNFS41_FCB nfs41_fcb = NFS41GetFcbExtension(RxContext->pFcb);
- + __notnull PFILE_OBJECTID_BUFFER objidbuf =
- + (PFILE_OBJECTID_BUFFER)FsCtl->pOutputBuffer;
- + if (objidbuf) {
- + ULONGLONG xor_fsid = nfs41_fcb->fsid_major ^ nfs41_fcb->fsid_minor;
- + (void)memset(objidbuf, 0, sizeof(FILE_OBJECTID_BUFFER));
- + (void)memcpy(&objidbuf->ObjectId[0], &nfs41_fcb->fileid, sizeof(ULONGLONG));
- + (void)memcpy(&objidbuf->ObjectId[8], &xor_fsid, sizeof(ULONGLONG));
- + status = STATUS_SUCCESS;
- + }
- + else {
- + status = STATUS_INVALID_USER_BUFFER;
- + }
- + break;
- default:
- break;
- }
- diff --git a/sys/nfs41sys_volinfo.c b/sys/nfs41sys_volinfo.c
- index e663d0b..9919556 100644
- --- a/sys/nfs41sys_volinfo.c
- +++ b/sys/nfs41sys_volinfo.c
- @@ -182,6 +182,26 @@ NTSTATUS nfs41_QueryVolumeInformation(
- status = STATUS_SUCCESS;
- goto out;
- }
- + case FileFsObjectIdInformation:
- + {
- + PFILE_FS_OBJECTID_INFORMATION pObjIdInfo = RxContext->Info.Buffer;
- +
- + SizeUsed = sizeof(FILE_FS_OBJECTID_INFORMATION);
- + if (RemainingLength < SizeUsed) {
- + status = STATUS_BUFFER_TOO_SMALL;
- + RxContext->InformationToReturn = SizeUsed;
- + goto out;
- + }
- +
- + (void)memset(pObjIdInfo, 0, sizeof(FILE_FS_OBJECTID_INFORMATION));
- + const ULONGLONG nfs41GUID = 0xDEADBEEF;
- + (void)memcpy(&pObjIdInfo->ObjectId[0], &nfs41GUID, sizeof(ULONGLONG));
- +
- + RxContext->Info.LengthRemaining -= SizeUsed;
- + status = STATUS_SUCCESS;
- + goto out;
- + }
- +
- case FileFsAttributeInformation:
- case FileFsSizeInformation:
Mount-DiskImage experiments
Posted by Anonymous on Sat 16th Aug 2025 13:43
raw | new post
modification of post by Anonymous (view diff)
Submit a correction or amendment below (click here to make a fresh posting)
After submitting an amendment, you'll be able to view the differences between the old and new posts easily.