Annotation of ntddk/src/mmedia/sndblst/dll/drvproc.c, revision 1.1

1.1     ! root        1: /****************************************************************************
        !             2: 
        !             3:  *
        !             4:  *   drvproc.c
        !             5:  *
        !             6:  *   Copyright (c) 1991-1992 Microsoft Corporation.  All Rights Reserved.
        !             7:  *
        !             8:  ***************************************************************************/
        !             9: 
        !            10: #include <windows.h>
        !            11: #include <mmsystem.h>
        !            12: #include "registry.h"
        !            13: #include "sndblst.h"
        !            14: 
        !            15: /* Temp definition until DefDriverProc gets properly defined */
        !            16: 
        !            17: 
        !            18: LONG APIENTRY DefDriverProc(DWORD  dwDriverIdentifier,
        !            19:                              HANDLE hDriver,
        !            20:                              UINT   message,  // Bug in ptypes32.h
        !            21:                              LONG   lParam1,
        !            22:                              LONG   lParam2);
        !            23: 
        !            24: /***************************************************************************
        !            25:  * @doc INTERNAL
        !            26:  *
        !            27:  * @api LRESULT | DriverProc | The entry point for an installable driver.
        !            28:  *
        !            29:  * @parm DWORD | dwDriverId | For most messages, <p dwDriverId> is the DWORD
        !            30:  *     value that the driver returns in response to a <m DRV_OPEN> message.
        !            31:  *     Each time that the driver is opened, through the <f DrvOpen> API,
        !            32:  *     the driver receives a <m DRV_OPEN> message and can return an
        !            33:  *     arbitrary, non-zero value. The installable driver interface
        !            34:  *     saves this value and returns a unique driver handle to the
        !            35:  *     application. Whenever the application sends a message to the
        !            36:  *     driver using the driver handle, the interface routes the message
        !            37:  *     to this entry point and passes the corresponding <p dwDriverId>.
        !            38:  *     This mechanism allows the driver to use the same or different
        !            39:  *     identifiers for multiple opens but ensures that driver handles
        !            40:  *     are unique at the application interface layer.
        !            41:  *
        !            42:  *     The following messages are not related to a particular open
        !            43:  *     instance of the driver. For these messages, the dwDriverId
        !            44:  *     will always be zero.
        !            45:  *
        !            46:  *         DRV_LOAD, DRV_FREE, DRV_ENABLE, DRV_DISABLE, DRV_OPEN
        !            47:  *
        !            48:  * @parm HDRVR | hDriver | This is the handle returned to the
        !            49:  *     application by the driver interface.
        !            50:  *
        !            51:  * @parm UINT | uiMessage | The requested action to be performed. Message
        !            52:  *     values below <m DRV_RESERVED> are used for globally defined messages.
        !            53:  *     Message values from <m DRV_RESERVED> to <m DRV_USER> are used for
        !            54:  *     defined driver protocols. Messages above <m DRV_USER> are used
        !            55:  *     for driver specific messages.
        !            56:  *
        !            57:  * @parm LPARAM | lParam1 | Data for this message.  Defined separately for
        !            58:  *     each message
        !            59:  *
        !            60:  * @parm LPARAM | lParam2 | Data for this message.  Defined separately for
        !            61:  *     each message
        !            62:  *
        !            63:  * @rdesc Defined separately for each message.
        !            64:  ***************************************************************************/
        !            65: LRESULT DriverProc(DWORD dwDriverID, HDRVR hDriver, UINT uiMessage, LPARAM lParam1, LPARAM lParam2)
        !            66: {
        !            67:     switch (uiMessage) {
        !            68:         case DRV_LOAD:
        !            69:             D1("DRV_LOAD");
        !            70: 
        !            71:             /*
        !            72:                Sent to the driver when it is loaded. Always the first
        !            73:                message received by a driver.
        !            74: 
        !            75:                dwDriverID is 0L.
        !            76:                lParam1 is 0L.
        !            77:                lParam2 is 0L.
        !            78: 
        !            79:                Return 0L to fail the load.
        !            80: 
        !            81:                DefDriverProc will return NON-ZERO so we don't have to
        !            82:                handle DRV_LOAD
        !            83:             */
        !            84: 
        !            85:             return (LRESULT)1L;
        !            86: 
        !            87:         case DRV_FREE:
        !            88:             D1("DRV_FREE");
        !            89: 
        !            90:             /*
        !            91:                Sent to the driver when it is about to be discarded. This
        !            92:                will always be the last message received by a driver before
        !            93:                it is freed.
        !            94: 
        !            95:                dwDriverID is 0L.
        !            96:                lParam1 is 0L.
        !            97:                lParam2 is 0L.
        !            98: 
        !            99:                Return value is ignored.
        !           100:             */
        !           101: 
        !           102:             return (LRESULT)1L;
        !           103: 
        !           104:         case DRV_OPEN:
        !           105:             D1("DRV_OPEN");
        !           106: 
        !           107:             /*
        !           108:                Sent to the driver when it is opened.
        !           109: 
        !           110:                dwDriverID is 0L.
        !           111: 
        !           112:                lParam1 is a far pointer to a zero-terminated string
        !           113:                containing the name used to open the driver.
        !           114: 
        !           115:                lParam2 is passed through from the drvOpen call.
        !           116: 
        !           117:                Return 0L to fail the open.
        !           118: 
        !           119:                DefDriverProc will return ZERO so we do have to
        !           120:                handle the DRV_OPEN message.
        !           121:              */
        !           122: 
        !           123:             //
        !           124:             // See if we can get access to our registry node
        !           125:             //
        !           126: 
        !           127:             DrvCreateServicesNode(STR_DRIVERNAME,
        !           128:                                   SoundDriverTypeNormal,
        !           129:                                   &RegAccess,
        !           130:                                   FALSE);             // Don't create
        !           131: 
        !           132:             return (LRESULT)1L;
        !           133: 
        !           134:         case DRV_CLOSE:
        !           135:             D1("DRV_CLOSE");
        !           136: 
        !           137:             /*
        !           138:                Sent to the driver when it is closed. Drivers are unloaded
        !           139:                when the close count reaches zero.
        !           140: 
        !           141:                dwDriverID is the driver identifier returned from the
        !           142:                corresponding DRV_OPEN.
        !           143: 
        !           144:                lParam1 is passed through from the drvClose call.
        !           145: 
        !           146:                lParam2 is passed through from the drvClose call.
        !           147: 
        !           148:                Return 0L to fail the close.
        !           149: 
        !           150:                DefDriverProc will return ZERO so we do have to
        !           151:                handle the DRV_CLOSE message.
        !           152:             */
        !           153: 
        !           154:             DrvCloseServiceManager(&RegAccess);
        !           155: 
        !           156:             return (LRESULT)1L;
        !           157: 
        !           158:         case DRV_ENABLE:
        !           159:             D1("DRV_ENABLE");
        !           160: 
        !           161:             /*
        !           162:                Sent to the driver when the driver is loaded or reloaded
        !           163:                and whenever Windows is enabled. Drivers should only
        !           164:                hook interrupts or expect ANY part of the driver to be in
        !           165:                memory between enable and disable messages
        !           166: 
        !           167:                dwDriverID is 0L.
        !           168:                lParam1 is 0L.
        !           169:                lParam2 is 0L.
        !           170: 
        !           171:                Return value is ignored.
        !           172:             */
        !           173: 
        !           174:             //return (LRESULT)(Enable() ? 1L : 0L);
        !           175: 
        !           176:             return 1L;
        !           177: 
        !           178:         case DRV_DISABLE:
        !           179:             D1("DRV_DISABLE");
        !           180: 
        !           181:             /*
        !           182:                Sent to the driver before the driver is freed.
        !           183:                and whenever Windows is disabled
        !           184: 
        !           185:                dwDriverID is 0L.
        !           186:                lParam1 is 0L.
        !           187:                lParam2 is 0L.
        !           188: 
        !           189:                Return value is ignored.
        !           190:             */
        !           191: 
        !           192:             // Disable();
        !           193:             return (LRESULT)1L;
        !           194: 
        !           195:         case DRV_QUERYCONFIGURE:
        !           196:             D1("DRV_QUERYCONFIGURE");
        !           197: 
        !           198:             /*
        !           199:                 Sent to the driver so that applications can
        !           200:                 determine whether the driver supports custom
        !           201:                 configuration. The driver should return a
        !           202:                 non-zero value to indicate that configuration
        !           203:                 is supported.
        !           204: 
        !           205:                 dwDriverID is the value returned from the DRV_OPEN
        !           206:                 call that must have succeeded before this message
        !           207:                 was sent.
        !           208: 
        !           209:                 lParam1 is passed from the app and is undefined.
        !           210:                 lParam2 is passed from the app and is undefined.
        !           211: 
        !           212:                 Return 0L to indicate configuration NOT supported.
        !           213:             */
        !           214: 
        !           215:             //
        !           216:             // Check to see if we can access the registry.
        !           217:             // Note thta this may be a config immediately after install
        !           218:             // so we may not have a service or node yet
        !           219:             //
        !           220: 
        !           221:             return (LRESULT)DrvAccess(&RegAccess);
        !           222: 
        !           223:         case DRV_CONFIGURE:
        !           224:             D1("DRV_CONFIGURE");
        !           225: 
        !           226:             /*
        !           227:                 Sent to the driver so that it can display a custom
        !           228:                 configuration dialog box.
        !           229: 
        !           230:                 lParam1 is passed from the app. and should contain
        !           231:                 the parent window handle in the loword.
        !           232:                 lParam2 is passed from the app and is undefined.
        !           233: 
        !           234:                 Return value is undefined.
        !           235: 
        !           236:                 Drivers should create their own section in system.ini.
        !           237:                 The section name should be the driver name.
        !           238:             */
        !           239: 
        !           240:             return (LRESULT)Config((HWND)lParam1, ghModule);
        !           241: 
        !           242:         case DRV_INSTALL:
        !           243: 
        !           244:            /*
        !           245:             *  See if we can support install
        !           246:             */
        !           247: 
        !           248:             if (!DrvAccess(&RegAccess)) {
        !           249:                 ConfigErrorMsgBox((HWND)lParam1, IDS_INSUFFICIENT_PRIVILEGE);
        !           250:                 return (LRESULT)DRVCNF_CANCEL;
        !           251:             }
        !           252: 
        !           253:            /*
        !           254:             *  Set a flag so that config knows we're installing something
        !           255:             */
        !           256: 
        !           257:             bInstall = TRUE;
        !           258: 
        !           259:             D1("DRV_INSTALL");
        !           260:             return (LRESULT)DRVCNF_RESTART;
        !           261: 
        !           262:         case DRV_REMOVE:
        !           263:            /*
        !           264:             *  See if we can support removal
        !           265:             */
        !           266: 
        !           267:             if (!DrvAccess(&RegAccess)) {
        !           268:                 ConfigErrorMsgBox((HWND)lParam1, IDS_INSUFFICIENT_PRIVILEGE);
        !           269:                 return (LRESULT)DRVCNF_CANCEL;
        !           270:             }
        !           271: 
        !           272:             D1("DRV_REMOVE");
        !           273:             return ConfigRemove((HWND)lParam1);
        !           274: 
        !           275:         default:
        !           276:             return DefDriverProc(dwDriverID, hDriver,uiMessage,lParam1,lParam2);
        !           277:     }
        !           278: }
        !           279: 
        !           280: 
        !           281: /****************************************************************************
        !           282:  * @doc INTERNAL
        !           283:  *
        !           284:  * @api int | DllEntryPoint | Library initialization code.
        !           285:  *
        !           286:  * @parm HANDLE | hModule | Our module handle.
        !           287:  *
        !           288:  * @parm DWORD | Reason | The reason we've been called
        !           289:  *
        !           290:  * @parm LPVOID | lpReserved | Extra data.
        !           291:  *
        !           292:  * @rdesc Returns 1 if the initialization was successful and 0 otherwise.
        !           293:  ***************************************************************************/
        !           294: 
        !           295:  BOOL DllEntryPoint(HANDLE hModule, DWORD Reason, LPVOID lpReserved)
        !           296:  {
        !           297:      switch (Reason) {
        !           298: 
        !           299:      case DLL_PROCESS_ATTACH:
        !           300:          //
        !           301:          // We're being loaded - save our handle
        !           302:          //
        !           303: 
        !           304:          ghModule = hModule;
        !           305: 
        !           306:                 return TRUE;
        !           307: 
        !           308:      default:
        !           309:          return TRUE;
        !           310:      }
        !           311: 
        !           312:  }

unix.superglobalmegacorp.com

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