Annotation of ntddk/src/mmedia/soundlib/auxout.c, revision 1.1

1.1     ! root        1: 
        !             2: /*++
        !             3: 
        !             4: Copyright (c) 1992  Microsoft Corporation
        !             5: 
        !             6: Module Name:
        !             7: 
        !             8:     auxout.c
        !             9: 
        !            10: Abstract:
        !            11: 
        !            12:     This module contains code for aux control which is non
        !            13:     hardware specific.
        !            14: 
        !            15: Author:
        !            16: 
        !            17:     Robin Speed (RobinSp) 1-Nov-1992
        !            18: 
        !            19: Environment:
        !            20: 
        !            21:     Kernel mode
        !            22: 
        !            23: Revision History:
        !            24: 
        !            25: --*/
        !            26: 
        !            27: #include <soundlib.h>
        !            28: 
        !            29: 
        !            30: NTSTATUS
        !            31: SoundAuxDispatch(
        !            32:     IN OUT PLOCAL_DEVICE_INFO pLDI,
        !            33:     IN    PIRP pIrp,
        !            34:     IN    PIO_STACK_LOCATION IrpStack
        !            35: )
        !            36: /*++
        !            37: 
        !            38: Routine Description:
        !            39: 
        !            40:     AUX IOCTL call dispatcher
        !            41: 
        !            42: Arguments:
        !            43: 
        !            44:     pLDI - Pointer to local device data
        !            45:     pIrp - Pointer to IO request packet
        !            46:     IrpStack - Pointer to current stack location
        !            47: 
        !            48: Return Value:
        !            49: 
        !            50:     Return status from dispatched routine
        !            51: 
        !            52: --*/
        !            53: {
        !            54:     NTSTATUS Status;
        !            55: 
        !            56:     switch (IrpStack->MajorFunction) {
        !            57:     case IRP_MJ_CREATE:
        !            58:         Status = STATUS_SUCCESS;
        !            59:         break;
        !            60: 
        !            61:     case IRP_MJ_CLOSE:
        !            62: 
        !            63:         Status = STATUS_SUCCESS;
        !            64: 
        !            65:         break;
        !            66: 
        !            67: 
        !            68:     case IRP_MJ_DEVICE_CONTROL:
        !            69: 
        !            70:         //
        !            71:         // Dispatch the IOCTL function
        !            72:         //
        !            73: 
        !            74:         Status = STATUS_INTERNAL_ERROR;
        !            75: 
        !            76:         switch (IrpStack->Parameters.DeviceIoControl.IoControlCode) {
        !            77: 
        !            78:         case IOCTL_AUX_GET_CAPABILITIES:
        !            79:             Status = (*pLDI->DeviceInit->DevCapsRoutine)(pLDI, pIrp, IrpStack);
        !            80:             break;
        !            81: 
        !            82:         case IOCTL_AUX_SET_VOLUME:
        !            83: 
        !            84: #ifdef MASTERVOLUME
        !            85:             //
        !            86:             // If this is the master volume device then let everyone else know
        !            87:             // (note that not all devices need a master volume because they
        !            88:             //  may have a master volume control in hardware).
        !            89:             //
        !            90: 
        !            91:             if (NT_SUCCESS(Status) && pLDI->MasterVolume) {
        !            92:                 //
        !            93:                 // Loop through all the driver's devices setting their
        !            94:                 // volume (including the master volume).
        !            95:                 //
        !            96: 
        !            97:                 PDEVICE_OBJECT pDO;
        !            98:                 for    (pDO = IrpStack->DeviceObject->DriverObject->DeviceObject;
        !            99:                      pDO != NULL;
        !           100:                      pDO = pDO->NextDevice) {
        !           101: 
        !           102:                     NTSTATUS StatusCurrent;
        !           103: 
        !           104:                     PLOCAL_DEVICE_INFO pLDICurrent = pDO->DeviceExtension;
        !           105: 
        !           106:                     //
        !           107:                     // Get the device mutant
        !           108:                     //
        !           109: 
        !           110:                     KeWaitForSingleObject(pLDICurrent->DeviceMutant,
        !           111:                                           Executive,
        !           112:                                           KernelMode,
        !           113:                                           FALSE,               // Not alertable
        !           114:                                           NULL);
        !           115: 
        !           116:                     StatusCurrent =
        !           117:                         SoundIoctlSetVolume(pLDICurrent, pIrp, IrpStack);
        !           118: 
        !           119:                     KeReleaseMutant(pLDICurrent->DeviceMutant, 0, FALSE, FALSE);
        !           120: 
        !           121:                     //
        !           122:                     // Return the first error
        !           123:                     //
        !           124: 
        !           125:                     if (!NT_SUCCESS(StatusCurrent) && NT_SUCCESS(Status)) {
        !           126:                         Status = StatusCurrent;
        !           127:                     }
        !           128:                 }
        !           129:             } else {
        !           130: #endif // MASTERVOLUME
        !           131:                 Status = SoundIoctlSetVolume(pLDI, pIrp, IrpStack);
        !           132: #ifdef MASTERVOLUME
        !           133:             }
        !           134: #endif // MASTERVOLUME
        !           135: 
        !           136:             break;
        !           137: 
        !           138:         case IOCTL_AUX_GET_VOLUME:
        !           139:             Status = SoundIoctlGetVolume(pLDI, pIrp, IrpStack);
        !           140:             break;
        !           141: 
        !           142:         case IOCTL_SOUND_GET_CHANGED_VOLUME:
        !           143:             Status = SoundIoctlGetChangedVolume(pLDI, pIrp, IrpStack);
        !           144:             break;
        !           145: 
        !           146:         default:
        !           147:             dprintf2(("Unimplemented IOCTL (%08lXH) requested", IrpStack->Parameters.DeviceIoControl.IoControlCode));
        !           148:             Status = STATUS_NOT_IMPLEMENTED;
        !           149:             break;
        !           150:         }
        !           151:         break;
        !           152: 
        !           153:     case IRP_MJ_CLEANUP:
        !           154:         Status = STATUS_SUCCESS;
        !           155:         break;
        !           156: 
        !           157: 
        !           158:     default:
        !           159:         dprintf1(("Unimplemented major function requested: %08lXH", IrpStack->MajorFunction));
        !           160:         Status = STATUS_NOT_IMPLEMENTED;
        !           161:         break;
        !           162:     }
        !           163: 
        !           164:     return Status;
        !           165: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.