Changeset 19881 in vbox
- Timestamp:
- May 21, 2009 1:09:48 PM (16 years ago)
- svn:sync-xref-src-repo-rev:
- 47576
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/HostDrivers/Support/SUPDrv.c
r19867 r19881 1633 1633 } 1634 1634 1635 case SUP_CTL_CODE_NO_SIZE(SUP_IOCTL_SEM_CREATE): 1636 { 1637 /* validate */ 1638 PSUPSEMCREATE pReq = (PSUPSEMCREATE)pReqHdr; 1639 REQ_CHECK_SIZES_EX(SUP_IOCTL_SEM_CREATE, SUP_IOCTL_SEM_CREATE_SIZE_IN, SUP_IOCTL_SEM_CREATE_SIZE_OUT); 1640 1641 /* execute */ 1642 switch (pReq->u.In.uType) 1643 { 1644 case SUP_SEM_TYPE_EVENT: 1645 { 1646 SUPSEMEVENT hEvent; 1647 pReq->Hdr.rc = SUPSemEventCreate(pSession, &hEvent); 1648 pReq->u.Out.hSem = (uint32_t)(uintptr_t)hEvent; 1649 break; 1650 } 1651 1652 case SUP_SEM_TYPE_EVENT_MULTI: 1653 { 1654 SUPSEMEVENTMULTI hEventMulti; 1655 pReq->Hdr.rc = SUPSemEventMultiCreate(pSession, &hEventMulti); 1656 pReq->u.Out.hSem = (uint32_t)(uintptr_t)hEventMulti; 1657 break; 1658 } 1659 1660 default: 1661 pReq->Hdr.rc = VERR_INVALID_PARAMETER; 1662 break; 1663 } 1664 return 0; 1665 } 1666 1667 case SUP_CTL_CODE_NO_SIZE(SUP_IOCTL_SEM_OP): 1668 { 1669 /* validate */ 1670 PSUPSEMOP pReq = (PSUPSEMOP)pReqHdr; 1671 REQ_CHECK_SIZES_EX(SUP_IOCTL_SEM_OP, SUP_IOCTL_SEM_OP_SIZE_IN, SUP_IOCTL_SEM_OP_SIZE_OUT); 1672 1673 /* execute */ 1674 switch (pReq->u.In.uType) 1675 { 1676 case SUP_SEM_TYPE_EVENT: 1677 { 1678 SUPSEMEVENT hEvent = (SUPSEMEVENT)(uintptr_t)pReq->u.In.hSem; 1679 switch (pReq->u.In.uOp) 1680 { 1681 case SUPSEMOP_WAIT: 1682 pReq->Hdr.rc = SUPSemEventWaitNoResume(pSession, hEvent, pReq->u.In.cMillies); 1683 break; 1684 case SUPSEMOP_SIGNAL: 1685 pReq->Hdr.rc = SUPSemEventSignal(pSession, hEvent); 1686 break; 1687 case SUPSEMOP_CLOSE: 1688 pReq->Hdr.rc = SUPSemEventClose(pSession, hEvent); 1689 break; 1690 case SUPSEMOP_RESET: 1691 default: 1692 pReq->Hdr.rc = VERR_INVALID_FUNCTION; 1693 break; 1694 } 1695 break; 1696 } 1697 1698 case SUP_SEM_TYPE_EVENT_MULTI: 1699 { 1700 SUPSEMEVENTMULTI hEventMulti = (SUPSEMEVENTMULTI)(uintptr_t)pReq->u.In.hSem; 1701 switch (pReq->u.In.uOp) 1702 { 1703 case SUPSEMOP_WAIT: 1704 pReq->Hdr.rc = SUPSemEventMultiWaitNoResume(pSession, hEventMulti, pReq->u.In.cMillies); 1705 break; 1706 case SUPSEMOP_SIGNAL: 1707 pReq->Hdr.rc = SUPSemEventMultiSignal(pSession, hEventMulti); 1708 break; 1709 case SUPSEMOP_CLOSE: 1710 pReq->Hdr.rc = SUPSemEventMultiClose(pSession, hEventMulti); 1711 break; 1712 case SUPSEMOP_RESET: 1713 pReq->Hdr.rc = SUPSemEventMultiReset(pSession, hEventMulti); 1714 break; 1715 default: 1716 pReq->Hdr.rc = VERR_INVALID_FUNCTION; 1717 break; 1718 } 1719 break; 1720 } 1721 1722 default: 1723 pReq->Hdr.rc = VERR_INVALID_PARAMETER; 1724 break; 1725 } 1726 return 0; 1727 } 1728 1635 1729 default: 1636 1730 Log(("Unknown IOCTL %#lx\n", (long)uIOCtl));
Note:
See TracChangeset
for help on using the changeset viewer.