Changeset 40278 in vbox for trunk/src/VBox/Additions/WINNT
- Timestamp:
- Feb 28, 2012 2:29:06 PM (13 years ago)
- svn:sync-xref-src-repo-rev:
- 76505
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Additions/WINNT/SharedFolders/driver/info.c
r40269 r40278 539 539 ULONG cbInfoBuffer = RxContext->Info.LengthRemaining; 540 540 ULONG cbToCopy = 0; 541 ULONG cbString = 0; 541 542 542 543 Log(("VBOXSF: MrxQueryVolumeInfo: pInfoBuffer = %p, cbInfoBuffer = %d\n", … … 578 579 pRootName++; /* Remove the leading backslash. */ 579 580 580 Log(("VBOXSF: MrxQueryVolumeInfo: FileFsVolumeInformation: Root name = %.*ls\n", 581 cbRootName / sizeof(WCHAR), pRootName)); 582 583 cbToCopy = sizeof(FILE_FS_VOLUME_INFORMATION); 584 cbToCopy += VBOX_VOLNAME_PREFIX_SIZE; 585 cbToCopy += cbRootName; 581 Log(("VBOXSF: MrxQueryVolumeInfo: FileFsVolumeInformation: Root name = %.*ls, %d bytes\n", 582 cbRootName / sizeof(WCHAR), pRootName, cbRootName)); 583 584 cbToCopy = FIELD_OFFSET(FILE_FS_VOLUME_INFORMATION, VolumeLabel); 585 586 cbString = VBOX_VOLNAME_PREFIX_SIZE; 587 cbString += cbRootName; 588 cbString += sizeof(WCHAR); 589 590 Log(("VBOXSF: MrxQueryVolumeInfo: FileFsVolumeInformation: cbToCopy %d, cbString %d\n", 591 cbToCopy, cbString)); 586 592 587 593 if (cbInfoBuffer < cbToCopy) … … 591 597 } 592 598 593 RtlZeroMemory(pInfo, sizeof(FILE_FS_VOLUME_INFORMATION));599 RtlZeroMemory(pInfo, cbToCopy); 594 600 595 601 /* Query serial number. */ … … 617 623 618 624 pInfo->VolumeCreationTime.QuadPart = 0; 619 pInfo->VolumeLabelLength = VBOX_VOLNAME_PREFIX_SIZE + cbRootName;620 625 pInfo->SupportsObjects = FALSE; 621 626 622 RtlCopyMemory(&pInfo->VolumeLabel[0], VBOX_VOLNAME_PREFIX, VBOX_VOLNAME_PREFIX_SIZE); 623 RtlCopyMemory(&pInfo->VolumeLabel[VBOX_VOLNAME_PREFIX_SIZE / sizeof(WCHAR)], pRootName, cbRootName); 627 if (cbInfoBuffer >= cbToCopy + cbString) 628 { 629 RtlCopyMemory(&pInfo->VolumeLabel[0], 630 VBOX_VOLNAME_PREFIX, 631 VBOX_VOLNAME_PREFIX_SIZE); 632 RtlCopyMemory(&pInfo->VolumeLabel[VBOX_VOLNAME_PREFIX_SIZE / sizeof(WCHAR)], 633 pRootName, 634 cbRootName); 635 pInfo->VolumeLabel[cbString / sizeof(WCHAR) - 1] = 0; 636 } 637 else 638 { 639 cbString = cbInfoBuffer - cbToCopy; 640 641 RtlCopyMemory(&pInfo->VolumeLabel[0], 642 VBOX_VOLNAME_PREFIX, 643 RT_MIN(cbString, VBOX_VOLNAME_PREFIX_SIZE)); 644 if (cbString > VBOX_VOLNAME_PREFIX_SIZE) 645 { 646 RtlCopyMemory(&pInfo->VolumeLabel[VBOX_VOLNAME_PREFIX_SIZE / sizeof(WCHAR)], 647 pRootName, 648 cbString - VBOX_VOLNAME_PREFIX_SIZE); 649 } 650 } 651 652 pInfo->VolumeLabelLength = cbString; 653 654 cbToCopy += cbString; 655 624 656 Log(("VBOXSF: MrxQueryVolumeInfo: FileFsVolumeInformation: VolumeLabelLength %d\n", 625 657 pInfo->VolumeLabelLength)); … … 646 678 pRootName++; /* Remove the leading backslash. */ 647 679 648 Log(("VBOXSF: MrxQueryVolumeInfo: FileFsLabelInformation: Root name = %.*ls\n", 649 cbRootName / sizeof(WCHAR), pRootName)); 650 651 cbToCopy = sizeof(FILE_FS_LABEL_INFORMATION); 652 cbToCopy += VBOX_VOLNAME_PREFIX_SIZE; 653 cbToCopy += cbRootName; 680 Log(("VBOXSF: MrxQueryVolumeInfo: FileFsLabelInformation: Root name = %.*ls, %d bytes\n", 681 cbRootName / sizeof(WCHAR), pRootName, cbRootName)); 682 683 cbToCopy = FIELD_OFFSET(FILE_FS_LABEL_INFORMATION, VolumeLabel); 684 685 cbString = VBOX_VOLNAME_PREFIX_SIZE; 686 cbString += cbRootName; 687 cbString += sizeof(WCHAR); 654 688 655 689 if (cbInfoBuffer < cbToCopy) … … 659 693 } 660 694 661 RtlZeroMemory(pInfo, sizeof(FILE_FS_LABEL_INFORMATION)); 662 663 pInfo->VolumeLabelLength = VBOX_VOLNAME_PREFIX_SIZE + cbRootName; 664 665 RtlCopyMemory(&pInfo->VolumeLabel[0], VBOX_VOLNAME_PREFIX, VBOX_VOLNAME_PREFIX_SIZE); 666 RtlCopyMemory(&pInfo->VolumeLabel[VBOX_VOLNAME_PREFIX_SIZE / sizeof(WCHAR)], pRootName, cbRootName); 695 RtlZeroMemory(pInfo, cbToCopy); 696 697 if (cbInfoBuffer >= cbToCopy + cbString) 698 { 699 RtlCopyMemory(&pInfo->VolumeLabel[0], 700 VBOX_VOLNAME_PREFIX, 701 VBOX_VOLNAME_PREFIX_SIZE); 702 RtlCopyMemory(&pInfo->VolumeLabel[VBOX_VOLNAME_PREFIX_SIZE / sizeof(WCHAR)], 703 pRootName, 704 cbRootName); 705 pInfo->VolumeLabel[cbString / sizeof(WCHAR) - 1] = 0; 706 } 707 else 708 { 709 cbString = cbInfoBuffer - cbToCopy; 710 711 RtlCopyMemory(&pInfo->VolumeLabel[0], 712 VBOX_VOLNAME_PREFIX, 713 RT_MIN(cbString, VBOX_VOLNAME_PREFIX_SIZE)); 714 if (cbString > VBOX_VOLNAME_PREFIX_SIZE) 715 { 716 RtlCopyMemory(&pInfo->VolumeLabel[VBOX_VOLNAME_PREFIX_SIZE / sizeof(WCHAR)], 717 pRootName, 718 cbString - VBOX_VOLNAME_PREFIX_SIZE); 719 } 720 } 721 722 pInfo->VolumeLabelLength = cbString; 723 724 cbToCopy += cbString; 725 726 Log(("VBOXSF: MrxQueryVolumeInfo: FileFsLabelInformation: VolumeLabelLength %d\n", 727 pInfo->VolumeLabelLength)); 667 728 668 729 Status = STATUS_SUCCESS; … … 789 850 case FileFsAttributeInformation: 790 851 { 791 PFILE_FS_ATTRIBUTE_INFORMATION p AttribInfo = (PFILE_FS_ATTRIBUTE_INFORMATION)pInfoBuffer;852 PFILE_FS_ATTRIBUTE_INFORMATION pInfo = (PFILE_FS_ATTRIBUTE_INFORMATION)pInfoBuffer; 792 853 793 854 Log(("VBOXSF: MrxQueryVolumeInfo: FileFsAttributeInformation\n")); 794 855 795 cbToCopy = sizeof(FILE_FS_ATTRIBUTE_INFORMATION); 796 cbToCopy += sizeof(MRX_VBOX_FILESYS_NAME_U) - sizeof(WCHAR); 856 cbToCopy = FIELD_OFFSET(FILE_FS_ATTRIBUTE_INFORMATION, FileSystemName); 857 858 cbString = sizeof(MRX_VBOX_FILESYS_NAME_U); 797 859 798 860 if (cbInfoBuffer < cbToCopy) … … 802 864 } 803 865 804 pAttribInfo->FileSystemAttributes = 0; /** @todo set unicode, case sensitive etc? */ 805 pAttribInfo->MaximumComponentNameLength = 255; /** @todo should query from the host */ 806 pAttribInfo->FileSystemNameLength = sizeof(MRX_VBOX_FILESYS_NAME_U); 807 RtlCopyMemory(pAttribInfo->FileSystemName, MRX_VBOX_FILESYS_NAME_U, sizeof(MRX_VBOX_FILESYS_NAME_U)); 866 pInfo->FileSystemAttributes = 0; /** @todo set unicode, case sensitive etc? */ 867 pInfo->MaximumComponentNameLength = 255; /** @todo should query from the host */ 868 869 if (cbInfoBuffer >= cbToCopy + cbString) 870 { 871 RtlCopyMemory(pInfo->FileSystemName, 872 MRX_VBOX_FILESYS_NAME_U, 873 sizeof(MRX_VBOX_FILESYS_NAME_U)); 874 } 875 else 876 { 877 cbString = cbInfoBuffer - cbToCopy; 878 879 RtlCopyMemory(pInfo->FileSystemName, 880 MRX_VBOX_FILESYS_NAME_U, 881 RT_MIN(cbString, sizeof(MRX_VBOX_FILESYS_NAME_U))); 882 } 883 884 pInfo->FileSystemNameLength = cbString; 885 886 cbToCopy += cbString; 887 888 Log(("VBOXSF: MrxQueryVolumeInfo: FileFsAttributeInformation: FileSystemNameLength %d\n", 889 pInfo->FileSystemNameLength)); 808 890 809 891 Status = STATUS_SUCCESS;
Note:
See TracChangeset
for help on using the changeset viewer.