Changeset 68623 in vbox
- Timestamp:
- Sep 4, 2017 6:56:56 PM (7 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
-
include/VBox/VBoxGuest.h (modified) (24 diffs)
-
src/VBox/Additions/common/VBoxGuest/VBoxGuest.cpp (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/VBoxGuest.h
r68616 r68623 48 48 * @note This is considered internal in ring-3, please use the VbglR3 functions. 49 49 * 50 * - The 7th bit (128) is reserved for distinguishing between 32-bit and 64-bit 51 * processes in future 64-bit guest additions, where it matters. 52 * - The 6th bit is reserved for future hacks. 53 * - IDC specific requests descends from 63. 50 * - I/O controls for user and/or kernel mode starts at 0. 51 * - IDC specific requests descends from 127. 52 * - Bits 7 and 6 are currently reserved for future hacks. 54 53 * 55 54 * @remarks When creating new IOCtl interfaces keep in mind that not all OSes supports … … 83 82 /** Cookie used to fend off some unwanted clients to the IOService. */ 84 83 # define VBOXGUEST_DARWIN_IOSERVICE_COOKIE UINT32_C(0x56426f78) /* 'VBox' */ 85 #endif86 87 /** The bit-count indicator mask. */88 #define VBGL_IOCTL_FLAG_BIT_MASK UINT32_C(128)89 /** 64-bit specific I/O control flag. */90 #define VBGL_IOCTL_FLAG_64BIT UINT32_C(128)91 /** 32-bit specific I/O control flag.92 * @note Just for complementing VBGL_IOCTL_FLAG_64BIT. It is also the same93 * value we use for bit-count agnostic requests, so don't ever use for94 * testing!95 * @internal */96 #define VBGL_IOCTL_FLAG_32BIT UINT32_C(0)97 /** 16-bit specific I/O control flag. */98 #define VBGL_IOCTL_FLAG_16BIT UINT32_C(64)99 /** Check if the I/O control is a 64-bit one. */100 #define VBGL_IOCTL_IS_64BIT(a_uIOCtl) RT_BOOL((a_uIOCtl) & VBGL_IOCTL_FLAG_64BIT)101 102 /** @def VBGL_IOCTL_FLAG_CC103 * The context specific bit-count flag to include in the bit-count sensitive104 * I/O controls. */105 #if ARCH_BITS == 64106 # define VBGL_IOCTL_FLAG_CC VBGL_IOCTL_FLAG_64BIT107 #elif ARCH_BITS == 32108 # define VBGL_IOCTL_FLAG_CC VBGL_IOCTL_FLAG_32BIT109 #elif ARCH_BITS == 16110 # define VBGL_IOCTL_FLAG_CC VBGL_IOCTL_FLAG_16BIT111 #else112 # error "dunno which arch this is!"113 84 #endif 114 85 … … 122 93 # define VBGL_IOCTL_CODE_BIG(Function) CTL_CODE(FILE_DEVICE_UNKNOWN, 2048 + (Function), METHOD_BUFFERED, FILE_WRITE_ACCESS) 123 94 # define VBGL_IOCTL_CODE_FAST(Function) CTL_CODE(FILE_DEVICE_UNKNOWN, 2048 + (Function), METHOD_NEITHER, FILE_WRITE_ACCESS) 124 # define VBGL_IOCTL_CODE_STRIPPED(a_uIOCtl) ( (a_uIOCtl) & ~VBGL_IOCTL_FLAG_BIT_MASK)95 # define VBGL_IOCTL_CODE_STRIPPED(a_uIOCtl) (a_uIOCtl) 125 96 # define VBOXGUEST_DEVICE_NAME "\\\\.\\VBoxGuest" 126 97 /** The support service name. */ … … 140 111 # define VBGL_IOCTL_CATEGORY_FAST 0xc3 /**< Also defined in VBoxGuestA-os2.asm. */ 141 112 # define VBGL_IOCTL_CODE_FAST(Function) ((unsigned char)(Function)) 142 # define VBGL_IOCTL_CODE_STRIPPED(a_uIOCtl) ( (a_uIOCtl) & ~VBGL_IOCTL_FLAG_BIT_MASK)113 # define VBGL_IOCTL_CODE_STRIPPED(a_uIOCtl) (a_uIOCtl) 143 114 # define VBOXGUEST_DEVICE_NAME "\\Dev\\VBoxGst$" 144 115 /** Short device name for AttachDD. … … 152 123 # define VBGL_IOCTL_CODE_BIG(Function) _IOWRN('V', (Function), sizeof(VBGLREQHDR)) 153 124 # define VBGL_IOCTL_CODE_FAST(Function) _IO( 'F', (Function)) 154 # define VBGL_IOCTL_CODE_STRIPPED(a_uIOCtl) ( (a_uIOCtl) & ~VBGL_IOCTL_FLAG_BIT_MASK)125 # define VBGL_IOCTL_CODE_STRIPPED(a_uIOCtl) (a_uIOCtl) 155 126 # define VBGL_IOCTL_IS_FAST(a_uIOCtl) ( ((a_uIOCtl) & 0x0000ff00) == ('F' << 8) ) 156 127 … … 161 132 # define VBGL_IOCTL_CODE_BIG(Function) _IO('V', (Function)) 162 133 # define VBGL_IOCTL_CODE_FAST(Function) _IO('F', (Function)) 163 # define VBGL_IOCTL_CODE_STRIPPED(a_uIOCtl) (_IOC_NR((a_uIOCtl)) & ~VBGL_IOCTL_FLAG_BIT_MASK)134 # define VBGL_IOCTL_CODE_STRIPPED(a_uIOCtl) _IOC_NR((a_uIOCtl)) 164 135 # define VBOXGUEST_USER_DEVICE_NAME "/dev/vboxuser" 165 136 … … 170 141 # define VBGL_IOCTL_CODE_BIG(Function) (0x56420000 | (Function)) 171 142 # define VBGL_IOCTL_CODE_FAST(Function) (0x56420000 | (Function)) 172 # define VBGL_IOCTL_CODE_STRIPPED(a_uIOCtl) ( (a_uIOCtl) & ~VBGL_IOCTL_FLAG_BIT_MASK)143 # define VBGL_IOCTL_CODE_STRIPPED(a_uIOCtl) (a_uIOCtl) 173 144 # define VBOXGUEST_DEVICE_NAME "/dev/misc/vboxguest" 174 145 … … 179 150 # define VBGL_IOCTL_CODE_BIG(Function) _IO('V', (Function)) 180 151 # define VBGL_IOCTL_CODE_FAST(Function) _IO('F', (Function)) 181 # define VBGL_IOCTL_CODE_STRIPPED(a_uIOCtl) ((a_uIOCtl) & ~(_IOC(0,0,0,IOCPARM_MASK) | VBGL_IOCTL_FLAG_BIT_MASK))152 # define VBGL_IOCTL_CODE_STRIPPED(a_uIOCtl) ((a_uIOCtl) & ~(_IOC(0,0,0,IOCPARM_MASK))) 182 153 # define VBGL_IOCTL_IS_FAST(a_uIOCtl) ( IOCGROUP(a_uIOCtl) == 'F' ) 183 154 #endif … … 341 312 * @{ 342 313 */ 343 #define VBGL_IOCTL_GET_VMMDEV_IO_INFO VBGL_IOCTL_CODE_SIZE(1 | VBGL_IOCTL_FLAG_CC, VBGL_IOCTL_GET_VMMDEV_IO_INFO_SIZE)314 #define VBGL_IOCTL_GET_VMMDEV_IO_INFO VBGL_IOCTL_CODE_SIZE(1, VBGL_IOCTL_GET_VMMDEV_IO_INFO_SIZE) 344 315 #define VBGL_IOCTL_GET_VMMDEV_IO_INFO_SIZE sizeof(VBGLIOCGETVMMDEVIOINFO) 345 316 #define VBGL_IOCTL_GET_VMMDEV_IO_INFO_SIZE_IN sizeof(VBGLREQHDR) … … 447 418 * 448 419 * @{ */ 449 # define VBGL_IOCTL_HGCM_CALL(a_cb) VBGL_IOCTL_CODE_SIZE(6 | VBGL_IOCTL_FLAG_CC, (a_cb)) 450 # define VBGL_IOCTL_HGCM_CALL_32(a_cb) VBGL_IOCTL_CODE_SIZE(6 | VBGL_IOCTL_FLAG_32BIT, (a_cb)) 451 # define VBGL_IOCTL_HGCM_CALL_64(a_cb) VBGL_IOCTL_CODE_SIZE(6 | VBGL_IOCTL_FLAG_64BIT, (a_cb)) 452 # define VBGL_IOCTL_HGCM_CALL_WITH_USER_DATA(a_cb) VBGL_IOCTL_CODE_SIZE(7 | VBGL_IOCTL_FLAG_CC, (a_cb)) 420 # define VBGL_IOCTL_HGCM_CALL_32(a_cb) VBGL_IOCTL_CODE_SIZE(6, (a_cb)) 421 # define VBGL_IOCTL_HGCM_CALL_64(a_cb) VBGL_IOCTL_CODE_SIZE(7, (a_cb)) 422 # if ARCH_BITS == 64 423 # define VBGL_IOCTL_HGCM_CALL(a_cb) VBGL_IOCTL_HGCM_CALL_64(a_cb) 424 # else 425 # define VBGL_IOCTL_HGCM_CALL(a_cb) VBGL_IOCTL_HGCM_CALL_32(a_cb) 426 # endif 427 # define VBGL_IOCTL_HGCM_CALL_WITH_USER_DATA(a_cb) VBGL_IOCTL_CODE_SIZE(8, (a_cb)) 453 428 /** @note This is used by alot of HGCM call structures. */ 454 429 typedef struct VBGLIOCHGCMCALL … … 562 537 * @{ */ 563 538 #define VBOXGUEST_IOCTL_LOG(Size) 564 #define VBGL_IOCTL_LOG(a_cchMsg) VBGL_IOCTL_CODE_BIG( 8)539 #define VBGL_IOCTL_LOG(a_cchMsg) VBGL_IOCTL_CODE_BIG(9) 565 540 #define VBGL_IOCTL_LOG_SIZE(a_cchMsg) (sizeof(VBGLREQHDR) + (a_cchMsg) + 1) 566 541 #define VBGL_IOCTL_LOG_SIZE_IN(a_cchMsg) (sizeof(VBGLREQHDR) + (a_cchMsg) + 1) … … 587 562 * @{ 588 563 */ 589 #define VBGL_IOCTL_WAIT_FOR_EVENTS VBGL_IOCTL_CODE_SIZE( 9, VBGL_IOCTL_GET_VMMDEV_IO_INFO_SIZE)564 #define VBGL_IOCTL_WAIT_FOR_EVENTS VBGL_IOCTL_CODE_SIZE(10, VBGL_IOCTL_GET_VMMDEV_IO_INFO_SIZE) 590 565 #define VBGL_IOCTL_WAIT_FOR_EVENTS_SIZE sizeof(VBGLIOCWAITFOREVENTS) 591 566 #define VBGL_IOCTL_WAIT_FOR_EVENTS_SIZE_IN sizeof(VBGLIOCWAITFOREVENTS) … … 627 602 * @{ 628 603 */ 629 #define VBGL_IOCTL_INTERRUPT_ALL_WAIT_FOR_EVENTS VBGL_IOCTL_CODE_SIZE(1 0, VBGL_IOCTL_INTERRUPT_ALL_WAIT_FOR_EVENTS_SIZE)604 #define VBGL_IOCTL_INTERRUPT_ALL_WAIT_FOR_EVENTS VBGL_IOCTL_CODE_SIZE(11, VBGL_IOCTL_INTERRUPT_ALL_WAIT_FOR_EVENTS_SIZE) 630 605 #define VBGL_IOCTL_INTERRUPT_ALL_WAIT_FOR_EVENTS_SIZE sizeof(VBGLREQHDR) 631 606 #define VBGL_IOCTL_INTERRUPT_ALL_WAIT_FOR_EVENTS_SIZE_IN sizeof(VBGLREQHDR) … … 637 612 * IOCTL to VBoxGuest to control the event filter mask. 638 613 * @{ */ 639 #define VBGL_IOCTL_CHANGE_FILTER_MASK VBGL_IOCTL_CODE_SIZE(1 1, VBGL_IOCTL_CHANGE_FILTER_MASK_SIZE)614 #define VBGL_IOCTL_CHANGE_FILTER_MASK VBGL_IOCTL_CODE_SIZE(12, VBGL_IOCTL_CHANGE_FILTER_MASK_SIZE) 640 615 #define VBGL_IOCTL_CHANGE_FILTER_MASK_SIZE sizeof(VBGLIOCCHANGEFILTERMASK) 641 616 #define VBGL_IOCTL_CHANGE_FILTER_MASK_SIZE_IN sizeof(VBGLIOCCHANGEFILTERMASK) … … 680 655 * @{ 681 656 */ 682 #define VBGL_IOCTL_ACQUIRE_GUEST_CAPABILITIES VBGL_IOCTL_CODE_SIZE(1 2, VBGL_IOCTL_ACQUIRE_GUEST_CAPABILITIES_SIZE)657 #define VBGL_IOCTL_ACQUIRE_GUEST_CAPABILITIES VBGL_IOCTL_CODE_SIZE(13, VBGL_IOCTL_ACQUIRE_GUEST_CAPABILITIES_SIZE) 683 658 #define VBGL_IOCTL_ACQUIRE_GUEST_CAPABILITIES_SIZE sizeof(VBGLIOCACQUIREGUESTCAPS) 684 659 #define VBGL_IOCTL_ACQUIRE_GUEST_CAPABILITIES_SIZE_IN sizeof(VBGLIOCACQUIREGUESTCAPS) … … 718 693 * IOCTL to VBoxGuest to set guest capabilities. 719 694 * @{ */ 720 #define VBGL_IOCTL_CHANGE_GUEST_CAPABILITIES VBGL_IOCTL_CODE_SIZE(1 3, VBGL_IOCTL_CHANGE_GUEST_CAPABILITIES_SIZE)695 #define VBGL_IOCTL_CHANGE_GUEST_CAPABILITIES VBGL_IOCTL_CODE_SIZE(14, VBGL_IOCTL_CHANGE_GUEST_CAPABILITIES_SIZE) 721 696 #define VBGL_IOCTL_CHANGE_GUEST_CAPABILITIES_SIZE sizeof(VBGLIOCSETGUESTCAPS) 722 697 #define VBGL_IOCTL_CHANGE_GUEST_CAPABILITIES_SIZE_IN sizeof(VBGLIOCSETGUESTCAPS) … … 752 727 * IOCTL to VBoxGuest to update the mouse status features. 753 728 * @{ */ 754 #define VBGL_IOCTL_SET_MOUSE_STATUS VBGL_IOCTL_CODE_SIZE(1 4, VBGL_IOCTL_SET_MOUSE_STATUS_SIZE)729 #define VBGL_IOCTL_SET_MOUSE_STATUS VBGL_IOCTL_CODE_SIZE(15, VBGL_IOCTL_SET_MOUSE_STATUS_SIZE) 755 730 #define VBGL_IOCTL_SET_MOUSE_STATUS_SIZE sizeof(VBGLIOCSETMOUSESTATUS) 756 731 #define VBGL_IOCTL_SET_MOUSE_STATUS_SIZE_IN sizeof(VBGLIOCSETMOUSESTATUS) … … 780 755 * 781 756 * @{ */ 782 #define VBGL_IOCTL_SET_MOUSE_NOTIFY_CALLBACK VBGL_IOCTL_CODE_SIZE(1 5, VBGL_IOCTL_SET_MOUSE_NOTIFY_CALLBACK_SIZE)757 #define VBGL_IOCTL_SET_MOUSE_NOTIFY_CALLBACK VBGL_IOCTL_CODE_SIZE(16, VBGL_IOCTL_SET_MOUSE_NOTIFY_CALLBACK_SIZE) 783 758 #define VBGL_IOCTL_SET_MOUSE_NOTIFY_CALLBACK_SIZE sizeof(VBGLIOCSETMOUSENOTIFYCALLBACK) 784 759 #define VBGL_IOCTL_SET_MOUSE_NOTIFY_CALLBACK_SIZE_IN sizeof(VBGLIOCSETMOUSENOTIFYCALLBACK) … … 816 791 * responsible for allocating memory and calling R0 (VBGL_IOCTL_CHANGE_BALLOON). 817 792 * @{ */ 818 #define VBGL_IOCTL_CHECK_BALLOON VBGL_IOCTL_CODE_SIZE(1 6, VBGL_IOCTL_CHECK_BALLOON_SIZE)793 #define VBGL_IOCTL_CHECK_BALLOON VBGL_IOCTL_CODE_SIZE(17, VBGL_IOCTL_CHECK_BALLOON_SIZE) 819 794 #define VBGL_IOCTL_CHECK_BALLOON_SIZE sizeof(VBGLIOCCHECKBALLOON) 820 795 #define VBGL_IOCTL_CHECK_BALLOON_SIZE_IN sizeof(VBGLREQHDR) … … 851 826 * 852 827 * @{ */ 853 #define VBGL_IOCTL_CHANGE_BALLOON VBGL_IOCTL_CODE_SIZE(1 7, VBGL_IOCTL_CHANGE_BALLOON_SIZE)828 #define VBGL_IOCTL_CHANGE_BALLOON VBGL_IOCTL_CODE_SIZE(18, VBGL_IOCTL_CHANGE_BALLOON_SIZE) 854 829 #define VBGL_IOCTL_CHANGE_BALLOON_SIZE sizeof(VBGLIOCCHANGEBALLOON) 855 830 #define VBGL_IOCTL_CHANGE_BALLOON_SIZE_IN sizeof(VBGLIOCCHANGEBALLOON) … … 879 854 * IOCTL to VBoxGuest to write guest core. 880 855 * @{ */ 881 #define VBGL_IOCTL_WRITE_CORE_DUMP VBGL_IOCTL_CODE_SIZE(1 8, VBGL_IOCTL_WRITE_CORE_DUMP_SIZE)856 #define VBGL_IOCTL_WRITE_CORE_DUMP VBGL_IOCTL_CODE_SIZE(19, VBGL_IOCTL_WRITE_CORE_DUMP_SIZE) 882 857 #define VBGL_IOCTL_WRITE_CORE_DUMP_SIZE sizeof(VBGLIOCWRITECOREDUMP) 883 858 #define VBGL_IOCTL_WRITE_CORE_DUMP_SIZE_IN sizeof(VBGLIOCWRITECOREDUMP) … … 906 881 * the release log on the host. Takes no data, returns no data. 907 882 * @{ */ 908 # define VBGL_IOCTL_DPC_LATENCY_CHECKER VBGL_IOCTL_CODE_SIZE( 19, VBGL_IOCTL_DPC_LATENCY_CHECKER_SIZE)883 # define VBGL_IOCTL_DPC_LATENCY_CHECKER VBGL_IOCTL_CODE_SIZE(20, VBGL_IOCTL_DPC_LATENCY_CHECKER_SIZE) 909 884 # define VBGL_IOCTL_DPC_LATENCY_CHECKER_SIZE sizeof(VBGLREQHDR) 910 885 # define VBGL_IOCTL_DPC_LATENCY_CHECKER_SIZE_IN sizeof(VBGLREQHDR) … … 1001 976 * @note ring-0 only. 1002 977 */ 1003 #define VBGL_IOCTL_IDC_CONNECT VBGL_IOCTL_CODE_SIZE(63 | (ARCH_BITS >= 32 ? VBGL_IOCTL_FLAG_CC : VBGL_IOCTL_FLAG_32BIT), VBGL_IOCTL_IDC_CONNECT_SIZE)978 #define VBGL_IOCTL_IDC_CONNECT VBGL_IOCTL_CODE_SIZE(63, VBGL_IOCTL_IDC_CONNECT_SIZE) 1004 979 #define VBGL_IOCTL_IDC_CONNECT_SIZE sizeof(VBGLIOCIDCCONNECT) 1005 980 #define VBGL_IOCTL_IDC_CONNECT_SIZE_IN RT_UOFFSET_AFTER(VBGLIOCIDCCONNECT, u.In) … … 1062 1037 * @note ring-0 only. 1063 1038 */ 1064 #define VBGL_IOCTL_IDC_DISCONNECT VBGL_IOCTL_CODE_SIZE(62 | (ARCH_BITS >= 32 ? VBGL_IOCTL_FLAG_CC : VBGL_IOCTL_FLAG_32BIT), VBGL_IOCTL_IDC_DISCONNECT_SIZE)1039 #define VBGL_IOCTL_IDC_DISCONNECT VBGL_IOCTL_CODE_SIZE(62, VBGL_IOCTL_IDC_DISCONNECT_SIZE) 1065 1040 #define VBGL_IOCTL_IDC_DISCONNECT_SIZE sizeof(VBGLIOCIDCDISCONNECT) 1066 1041 #define VBGL_IOCTL_IDC_DISCONNECT_SIZE_IN sizeof(VBGLIOCIDCDISCONNECT) -
trunk/src/VBox/Additions/common/VBoxGuest/VBoxGuest.cpp
r68565 r68623 3667 3667 } 3668 3668 #ifdef VBOX_WITH_HGCM 3669 else if (iFunctionStripped == VBGL_IOCTL_CODE_STRIPPED(VBGL_IOCTL_HGCM_CALL(0))) 3669 else if ( iFunctionStripped == VBGL_IOCTL_CODE_STRIPPED(VBGL_IOCTL_HGCM_CALL(0)) 3670 # if ARCH_BITS == 64 3671 || iFunctionStripped == VBGL_IOCTL_CODE_STRIPPED(VBGL_IOCTL_HGCM_CALL_32(0)) 3672 # endif 3673 ) 3670 3674 { 3671 3675 REQ_CHECK_EXPR(VBGL_IOCTL_HGCM_CALL, pReqHdr->cbIn >= sizeof(VBGLIOCHGCMCALL)); 3672 3676 REQ_CHECK_EXPR(VBGL_IOCTL_HGCM_CALL, pReqHdr->cbIn == pReqHdr->cbOut); 3673 3677 pReqHdr->rc = vgdrvIoCtl_HGCMCallWrapper(pDevExt, pSession, (PVBGLIOCHGCMCALL)pReqHdr, 3674 !VBGL_IOCTL_IS_64BIT(iFunction), false /*fUserData*/, cbReq); 3678 iFunctionStripped == VBGL_IOCTL_CODE_STRIPPED(VBGL_IOCTL_HGCM_CALL_32(0)), 3679 false /*fUserData*/, cbReq); 3675 3680 } 3676 3681 else if (iFunctionStripped == VBGL_IOCTL_CODE_STRIPPED(VBGL_IOCTL_HGCM_CALL_WITH_USER_DATA(0))) … … 3680 3685 REQ_CHECK_EXPR(VBGL_IOCTL_HGCM_CALL, pReqHdr->cbIn == pReqHdr->cbOut); 3681 3686 pReqHdr->rc = vgdrvIoCtl_HGCMCallWrapper(pDevExt, pSession, (PVBGLIOCHGCMCALL)pReqHdr, 3682 !VBGL_IOCTL_IS_64BIT(iFunction), true /*fUserData*/, cbReq);3687 ARCH_BITS == 32, true /*fUserData*/, cbReq); 3683 3688 } 3684 3689 #endif /* VBOX_WITH_HGCM */
Note:
See TracChangeset
for help on using the changeset viewer.

