Annotation of ntddk/src/mmedia/sndblst/dll/drvproc.c, revision 1.1.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.