Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/HostServices/VBoxClipboardSvc.h
r83621 r84996 828 828 829 829 /** 830 * Status messag for lists and objects.830 * Status message for lists and objects. 831 831 */ 832 832 typedef struct _VBoxShClStatusMsg … … 838 838 /** uint32_t, in: Transfer status of type SHCLTRANSFERSTATUS. */ 839 839 HGCMFunctionParameter uStatus; 840 /** uint32_t, in: Size of payload of this status, based on the status type. */841 HGCMFunctionParameter cbPayload;842 840 /** pointer, in: Optional payload of this status, based on the status type. */ 843 841 HGCMFunctionParameter pvPayload; 844 842 } VBoxShClStatusMsg; 845 843 846 #define VBOX_SHCL_CPARMS_STATUS 4844 #define VBOX_SHCL_CPARMS_STATUS 3 847 845 848 846 /** Invalid message type, do not use. */ … … 872 870 /** uint32_t, out: IPRT result of overall operation. */ 873 871 HGCMFunctionParameter rc; 874 /** uint32_t, out: Size of optional payload of this reply, based on the message type. */875 HGCMFunctionParameter cbPayload;876 872 /** pointer, out: Optional payload of this reply, based on the message type. */ 877 873 HGCMFunctionParameter pvPayload; … … 898 894 899 895 /** Minimum parameters (HGCM function parameters minus the union) a reply message must have. */ 900 #define VBOX_SHCL_CPARMS_REPLY_MIN 5896 #define VBOX_SHCL_CPARMS_REPLY_MIN 4 901 897 902 898 /** … … 911 907 } VBoxShClRootListParms; 912 908 909 #define VBOX_SHCL_CPARMS_ROOT_LIST 2 910 913 911 /** 914 912 * Requests to read the root list header. … … 921 919 } VBoxShClRootListReadReqMsg; 922 920 923 #define VBOX_SHCL_CPARMS_ROOT_LIST_HDR_READ_REQ 2921 #define VBOX_SHCL_CPARMS_ROOT_LIST_HDR_READ_REQ VBOX_SHCL_CPARMS_ROOT_LIST 924 922 925 923 /** … … 935 933 } VBoxShClRootListHdrMsg; 936 934 937 #define VBOX_SHCL_CPARMS_ROOT_LIST_HDR_READ 3938 #define VBOX_SHCL_CPARMS_ROOT_LIST_HDR_WRITE 3935 #define VBOX_SHCL_CPARMS_ROOT_LIST_HDR_READ VBOX_SHCL_CPARMS_ROOT_LIST + 1 936 #define VBOX_SHCL_CPARMS_ROOT_LIST_HDR_WRITE VBOX_SHCL_CPARMS_ROOT_LIST + 1 939 937 940 938 /** … … 951 949 } VBoxShClRootListEntryParms; 952 950 951 #define VBOX_SHCL_CPARMS_ROOT_LIST_ENTRY 3 952 953 953 /** 954 954 * Request to read a list root entry. … … 962 962 } VBoxShClRootListEntryReadReqMsg; 963 963 964 #define VBOX_SHCL_CPARMS_ROOT_LIST_ENTRY_READ_REQ 3964 #define VBOX_SHCL_CPARMS_ROOT_LIST_ENTRY_READ_REQ VBOX_SHCL_CPARMS_ROOT_LIST_ENTRY 965 965 966 966 /** … … 982 982 } VBoxShClRootListEntryMsg; 983 983 984 #define VBOX_SHCL_CPARMS_ROOT_LIST_ENTRY_READ 6985 #define VBOX_SHCL_CPARMS_ROOT_LIST_ENTRY_WRITE 6984 #define VBOX_SHCL_CPARMS_ROOT_LIST_ENTRY_READ VBOX_SHCL_CPARMS_ROOT_LIST_ENTRY + 3 985 #define VBOX_SHCL_CPARMS_ROOT_LIST_ENTRY_WRITE VBOX_SHCL_CPARMS_ROOT_LIST_ENTRY + 3 986 986 987 987 /** … … 996 996 /** uint32_t, in: Listing flags (see VBOX_SHCL_LIST_FLAG_XXX). */ 997 997 HGCMFunctionParameter fList; 998 /** uint32_t, in: Size (in bytes) of the filter string. */999 HGCMFunctionParameter cbFilter;1000 998 /** pointer, in: Filter string. */ 1001 999 HGCMFunctionParameter pvFilter; 1002 /** uint32_t, in: Size (in bytes) of the listing path. */1003 HGCMFunctionParameter cbPath;1004 1000 /** pointer, in: Listing poth. If empty or NULL the listing's root path will be opened. */ 1005 1001 HGCMFunctionParameter pvPath; … … 1008 1004 } VBoxShClListOpenMsg; 1009 1005 1010 #define VBOX_SHCL_CPARMS_LIST_OPEN 71006 #define VBOX_SHCL_CPARMS_LIST_OPEN 5 1011 1007 1012 1008 /** … … 1035 1031 } VBoxShClListHdrReqParms; 1036 1032 1033 #define VBOX_SHCL_CPARMS_LIST_HDR_REQ 3 1034 1037 1035 /** 1038 1036 * Request to read a list header. … … 1045 1043 } VBoxShClListHdrReadReqMsg; 1046 1044 1047 #define VBOX_SHCL_CPARMS_LIST_HDR_READ_REQ 31045 #define VBOX_SHCL_CPARMS_LIST_HDR_READ_REQ VBOX_SHCL_CPARMS_LIST_HDR_REQ 1048 1046 1049 1047 /** … … 1057 1055 /** uint32_t, in/out: Feature flags (see VBOX_SHCL_FEATURE_FLAG_XXX). */ 1058 1056 HGCMFunctionParameter fFeatures; 1059 /** uint64_t, in/out: Number of total objects to transfer. */1057 /** uint64_t, in/out: Number of total objects to transfer. */ 1060 1058 HGCMFunctionParameter cTotalObjects; 1061 /** uint64_t, in/out: Number of total bytes to transfer. */1059 /** uint64_t, in/out: Number of total bytes to transfer. */ 1062 1060 HGCMFunctionParameter cbTotalSize; 1063 1061 } VBoxShClListHdrMsg; 1064 1062 1065 #define VBOX_SHCL_CPARMS_LIST_HDR 61063 #define VBOX_SHCL_CPARMS_LIST_HDR VBOX_SHCL_CPARMS_LIST_HDR_REQ + 3 1066 1064 1067 1065 typedef struct _VBoxShClListEntryReqParms … … 1075 1073 } VBoxShClListEntryReqParms; 1076 1074 1075 #define VBOX_SHCL_CPARMS_LIST_ENTRY_REQ 3 1076 1077 1077 /** 1078 1078 * Request to read a list entry. … … 1085 1085 } VBoxShClListEntryReadReqMsg; 1086 1086 1087 #define VBOX_SHCL_CPARMS_LIST_ENTRY_READ 31087 #define VBOX_SHCL_CPARMS_LIST_ENTRY_READ VBOX_SHCL_CPARMS_LIST_ENTRY_REQ 1088 1088 1089 1089 /** … … 1097 1097 VBoxShClListEntryReqParms ReqParms; 1098 1098 /** pointer, in/out: Entry name. */ 1099 HGCMFunctionParameter szName;1099 HGCMFunctionParameter szName; 1100 1100 /** uint32_t, out: Bytes to be used for information/How many bytes were used. */ 1101 HGCMFunctionParameter cbInfo;1101 HGCMFunctionParameter cbInfo; 1102 1102 /** pointer, in/out: Information to be set/get (SHCLFSOBJINFO only currently). 1103 1103 * Do not forget to set the SHCLFSOBJINFO::Attr::enmAdditional for Get operation as well. */ 1104 HGCMFunctionParameter pvInfo;1104 HGCMFunctionParameter pvInfo; 1105 1105 } VBoxShClListEntryMsg; 1106 1106 1107 #define VBOX_SHCL_CPARMS_LIST_ENTRY 61107 #define VBOX_SHCL_CPARMS_LIST_ENTRY VBOX_SHCL_CPARMS_LIST_ENTRY_REQ + 3 1108 1108 1109 1109 /** … … 1116 1116 /** uint64_t, in/out: Context ID. */ 1117 1117 HGCMFunctionParameter uContext; 1118 /** uint64_t, in/out: Object handle. */1118 /** uint64_t, out: Object handle. */ 1119 1119 HGCMFunctionParameter uHandle; 1120 /** uint32_t, in/out: Size (in bytes) of absoulte path of object to open/create. */ 1121 HGCMFunctionParameter cbPath; 1122 /** pointer, in/out: Absoulte path of object to open/create. */ 1120 /** pointer, in: Absoulte path of object to open/create. */ 1123 1121 HGCMFunctionParameter szPath; 1124 /** uint32_t in /out: Open / Create flags of type SHCL_OBJ_CF_. */1122 /** uint32_t in: Open / Create flags of type SHCL_OBJ_CF_. */ 1125 1123 HGCMFunctionParameter fCreate; 1126 1124 } VBoxShClObjOpenMsg; 1127 1125 1128 #define VBOX_SHCL_CPARMS_OBJ_OPEN 51126 #define VBOX_SHCL_CPARMS_OBJ_OPEN 4 1129 1127 1130 1128 /** … … 1185 1183 /** uint64_t, in/out: SHCLOBJHANDLE of object to write to. */ 1186 1184 HGCMFunctionParameter uHandle; 1187 /** uint32_t, in/out: Size (in bytes) of current data chunk. */1185 /** uint32_t, out: Size (in bytes) read/written. */ 1188 1186 HGCMFunctionParameter cbData; 1189 1187 /** pointer, in/out: Current data chunk. */ -
trunk/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibClipboard.cpp
r84733 r84996 817 817 Msg.enmType.SetUInt32(VBOX_SHCL_REPLYMSGTYPE_TRANSFER_STATUS); 818 818 Msg.rc.SetUInt32((uint32_t )rcTransfer); /* int vs. uint32_t */ 819 Msg.cbPayload.SetUInt32(0);820 819 Msg.pvPayload.SetPtr(NULL, 0); 821 820 … … 986 985 Msg.uContext.SetUInt64(pCtx->idContext); 987 986 Msg.fList.SetUInt32(0); 988 Msg.cbFilter.SetUInt32(pOpenParms->cbFilter);989 987 Msg.pvFilter.SetPtr(pOpenParms->pszFilter, pOpenParms->cbFilter); 990 Msg.cbPath.SetUInt32(pOpenParms->cbPath);991 988 Msg.pvPath.SetPtr(pOpenParms->pszPath, pOpenParms->cbPath); 992 989 Msg.uHandle.SetUInt64(0); … … 1022 1019 Msg.uContext.SetUInt64(VBOX_SHCL_HOST_MSG_TRANSFER_LIST_OPEN); 1023 1020 Msg.fList.SetUInt32(0); 1024 Msg.cbPath.SetUInt32(pOpenParms->cbPath);1025 1021 Msg.pvPath.SetPtr(pOpenParms->pszPath, pOpenParms->cbPath); 1026 Msg.cbFilter.SetUInt32(pOpenParms->cbFilter);1027 1022 Msg.pvFilter.SetPtr(pOpenParms->pszFilter, pOpenParms->cbFilter); 1028 1023 Msg.uHandle.SetUInt64(0); … … 1034 1029 if (RT_SUCCESS(rc)) 1035 1030 rc = Msg.fList.GetUInt32(&pOpenParms->fList); 1036 if (RT_SUCCESS(rc))1037 rc = Msg.cbFilter.GetUInt32(&pOpenParms->cbFilter);1038 if (RT_SUCCESS(rc))1039 rc = Msg.cbPath.GetUInt32(&pOpenParms->cbPath);1040 1031 } 1041 1032 … … 1065 1056 Msg.enmType.SetUInt32(VBOX_SHCL_REPLYMSGTYPE_LIST_OPEN); 1066 1057 Msg.rc.SetUInt32((uint32_t)rcReply); /** int vs. uint32_t */ 1067 Msg.cbPayload.SetUInt32(0);1068 1058 Msg.pvPayload.SetPtr(NULL, 0); 1069 1059 … … 1130 1120 Msg.enmType.SetUInt32(VBOX_SHCL_REPLYMSGTYPE_LIST_CLOSE); 1131 1121 Msg.rc.SetUInt32((uint32_t)rcReply); /** int vs. uint32_t */ 1132 Msg.cbPayload.SetUInt32(0);1133 1122 Msg.pvPayload.SetPtr(NULL, 0); 1134 1123 … … 1414 1403 Msg.uContext.SetUInt64(VBOX_SHCL_HOST_MSG_TRANSFER_OBJ_OPEN); 1415 1404 Msg.uHandle.SetUInt64(0); 1416 Msg.cbPath.SetUInt32(pCreateParms->cbPath);1417 1405 Msg.szPath.SetPtr(pCreateParms->pszPath, pCreateParms->cbPath); 1418 1406 Msg.fCreate.SetUInt32(0); … … 1422 1410 { 1423 1411 rc = Msg.uContext.GetUInt64(&pCtx->idContext); 1424 if (RT_SUCCESS(rc))1425 rc = Msg.cbPath.GetUInt32(&pCreateParms->cbPath);1426 1412 if (RT_SUCCESS(rc)) 1427 1413 rc = Msg.fCreate.GetUInt32(&pCreateParms->fCreate); … … 1453 1439 Msg.enmType.SetUInt32(VBOX_SHCL_REPLYMSGTYPE_OBJ_OPEN); 1454 1440 Msg.rc.SetUInt32((uint32_t)rcReply); /** int vs. uint32_t */ 1455 Msg.cbPayload.SetUInt32(0);1456 1441 Msg.pvPayload.SetPtr(NULL, 0); 1457 1442 … … 1487 1472 Msg.uContext.SetUInt64(pCtx->idContext); 1488 1473 Msg.uHandle.SetUInt64(0); 1489 Msg.cbPath.SetUInt32(pCreateParms->cbPath);1490 1474 Msg.szPath.SetPtr((void *)pCreateParms->pszPath, pCreateParms->cbPath); 1491 1475 Msg.fCreate.SetUInt32(pCreateParms->fCreate); … … 1555 1539 Msg.enmType.SetUInt32(VBOX_SHCL_REPLYMSGTYPE_OBJ_CLOSE); 1556 1540 Msg.rc.SetUInt32((uint32_t)rcReply); /** int vs. uint32_t */ 1557 Msg.cbPayload.SetUInt32(0);1558 1541 Msg.pvPayload.SetPtr(NULL, 0); 1559 1542 … … 1710 1693 Msg.uHandle.SetUInt64(hObj); 1711 1694 Msg.pvData.SetPtr(pvData, cbData); 1712 Msg.cbData.SetUInt32(cbData);1713 1695 Msg.pvChecksum.SetPtr(NULL, 0); 1714 Msg.cbChecksum.SetUInt32(0);1715 1696 1716 1697 int rc = VbglR3HGCMCall(&Msg.hdr, sizeof(Msg)); -
trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-transfers.cpp
r84142 r84996 791 791 if (cParms >= VBOX_SHCL_CPARMS_REPLY_MIN) 792 792 { 793 uint32_t cbPayload = 0;794 795 793 /* aParms[0] has the context ID. */ 796 794 rc = HGCMSvcGetU32(&aParms[1], &pReply->uType); … … 798 796 rc = HGCMSvcGetU32(&aParms[2], &pReply->rc); 799 797 if (RT_SUCCESS(rc)) 800 rc = HGCMSvcGetU32(&aParms[3], &cbPayload); 801 if (RT_SUCCESS(rc)) 802 { 803 rc = HGCMSvcGetPv(&aParms[4], &pReply->pvPayload, &pReply->cbPayload); 804 AssertReturn(cbPayload == pReply->cbPayload, VERR_INVALID_PARAMETER); 805 } 798 rc = HGCMSvcGetPv(&aParms[3], &pReply->pvPayload, &pReply->cbPayload); 806 799 807 800 if (RT_SUCCESS(rc)) … … 809 802 rc = VERR_INVALID_PARAMETER; /* Play safe. */ 810 803 804 const unsigned idxParm = VBOX_SHCL_CPARMS_REPLY_MIN; 805 811 806 switch (pReply->uType) 812 807 { 813 808 case VBOX_SHCL_REPLYMSGTYPE_TRANSFER_STATUS: 814 809 { 815 if (cParms > = 6)816 rc = HGCMSvcGetU32(&aParms[ 5], &pReply->u.TransferStatus.uStatus);810 if (cParms > idxParm) 811 rc = HGCMSvcGetU32(&aParms[idxParm], &pReply->u.TransferStatus.uStatus); 817 812 818 813 LogFlowFunc(("uTransferStatus=%RU32\n", pReply->u.TransferStatus.uStatus)); … … 822 817 case VBOX_SHCL_REPLYMSGTYPE_LIST_OPEN: 823 818 { 824 if (cParms > = 6)825 rc = HGCMSvcGetU64(&aParms[ 5], &pReply->u.ListOpen.uHandle);819 if (cParms > idxParm) 820 rc = HGCMSvcGetU64(&aParms[idxParm], &pReply->u.ListOpen.uHandle); 826 821 827 822 LogFlowFunc(("hListOpen=%RU64\n", pReply->u.ListOpen.uHandle)); … … 831 826 case VBOX_SHCL_REPLYMSGTYPE_LIST_CLOSE: 832 827 { 833 if (cParms > = 6)834 rc = HGCMSvcGetU64(&aParms[ 5], &pReply->u.ListClose.uHandle);828 if (cParms > idxParm) 829 rc = HGCMSvcGetU64(&aParms[idxParm], &pReply->u.ListClose.uHandle); 835 830 836 831 LogFlowFunc(("hListClose=%RU64\n", pReply->u.ListClose.uHandle)); … … 840 835 case VBOX_SHCL_REPLYMSGTYPE_OBJ_OPEN: 841 836 { 842 if (cParms > = 6)843 rc = HGCMSvcGetU64(&aParms[ 5], &pReply->u.ObjOpen.uHandle);837 if (cParms > idxParm) 838 rc = HGCMSvcGetU64(&aParms[idxParm], &pReply->u.ObjOpen.uHandle); 844 839 845 840 LogFlowFunc(("hObjOpen=%RU64\n", pReply->u.ObjOpen.uHandle)); … … 849 844 case VBOX_SHCL_REPLYMSGTYPE_OBJ_CLOSE: 850 845 { 851 if (cParms > = 6)852 rc = HGCMSvcGetU64(&aParms[ 5], &pReply->u.ObjClose.uHandle);846 if (cParms > idxParm) 847 rc = HGCMSvcGetU64(&aParms[idxParm], &pReply->u.ObjClose.uHandle); 853 848 854 849 LogFlowFunc(("hObjClose=%RU64\n", pReply->u.ObjClose.uHandle)); … … 947 942 if (cParms == VBOX_SHCL_CPARMS_LIST_OPEN) 948 943 { 949 uint32_t cbPath = 0;950 uint32_t cbFilter = 0;951 952 944 rc = HGCMSvcGetU32(&aParms[1], &pOpenParms->fList); 953 945 if (RT_SUCCESS(rc)) 954 rc = HGCMSvcGetU32(&aParms[2], &cbFilter); 955 if (RT_SUCCESS(rc)) 956 { 957 rc = HGCMSvcGetStr(&aParms[3], &pOpenParms->pszFilter, &pOpenParms->cbFilter); 958 AssertReturn(cbFilter == pOpenParms->cbFilter, VERR_INVALID_PARAMETER); 959 } 960 if (RT_SUCCESS(rc)) 961 rc = HGCMSvcGetU32(&aParms[4], &cbPath); 962 if (RT_SUCCESS(rc)) 963 { 964 rc = HGCMSvcGetStr(&aParms[5], &pOpenParms->pszPath, &pOpenParms->cbPath); 965 AssertReturn(cbPath == pOpenParms->cbPath, VERR_INVALID_PARAMETER); 966 } 946 rc = HGCMSvcGetStr(&aParms[2], &pOpenParms->pszFilter, &pOpenParms->cbFilter); 947 if (RT_SUCCESS(rc)) 948 rc = HGCMSvcGetStr(&aParms[3], &pOpenParms->pszPath, &pOpenParms->cbPath); 967 949 968 950 /** @todo Some more validation. */ … … 993 975 HGCMSvcSetU64(&aParms[0], idCtx); 994 976 HGCMSvcSetU32(&aParms[1], pOpenParms->fList); 995 HGCMSvcSetU32(&aParms[2], pOpenParms->cbFilter); 996 HGCMSvcSetPv (&aParms[3], pOpenParms->pszFilter, pOpenParms->cbFilter); 997 HGCMSvcSetU32(&aParms[4], pOpenParms->cbPath); 998 HGCMSvcSetPv (&aParms[5], pOpenParms->pszPath, pOpenParms->cbPath); 999 HGCMSvcSetU64(&aParms[6], 0); /* OUT: uHandle */ 977 HGCMSvcSetPv (&aParms[2], pOpenParms->pszFilter, pOpenParms->cbFilter); 978 HGCMSvcSetPv (&aParms[3], pOpenParms->pszPath, pOpenParms->cbPath); 979 HGCMSvcSetU64(&aParms[4], 0); /* OUT: uHandle */ 1000 980 1001 981 rc = VINF_SUCCESS; … … 1623 1603 RT_ZERO(openCreateParms); 1624 1604 1625 uint32_t cbPath; 1626 rc = HGCMSvcGetU32(&aParms[2], &cbPath); /** @todo r=bird: This is an pointless parameter. */ 1627 if (RT_SUCCESS(rc)) 1628 { 1629 /** @todo r=bird: This is the wrong way of getting a string! */ 1630 rc = HGCMSvcGetPv(&aParms[3], (void **)&openCreateParms.pszPath, &openCreateParms.cbPath); 1631 if (cbPath != openCreateParms.cbPath) 1632 rc = VERR_INVALID_PARAMETER; 1633 } 1634 if (RT_SUCCESS(rc)) 1635 rc = HGCMSvcGetU32(&aParms[4], &openCreateParms.fCreate); 1605 /* aParms[1] will return the object handle on success; see below. */ 1606 rc = HGCMSvcGetStr(&aParms[2], &openCreateParms.pszPath, &openCreateParms.cbPath); 1607 if (RT_SUCCESS(rc)) 1608 rc = HGCMSvcGetU32(&aParms[3], &openCreateParms.fCreate); 1636 1609 1637 1610 if (RT_SUCCESS(rc))
Note:
See TracChangeset
for help on using the changeset viewer.

