Annotation of mstools/win32s/ut/samples/ut_def/db32.c, revision 1.1

1.1     ! root        1: /*++
        !             2: 
        !             3: Copyright (c) 1985-92, Microsoft Corporation
        !             4: 
        !             5: Module Name:
        !             6: 
        !             7:     db32.c
        !             8: 
        !             9: Abstract:
        !            10: 
        !            11:     Win32s sample code of Universal Thunk (UT) -
        !            12:     32bit code that provides the same services as DB.DLL by means
        !            13:     of thunking to 16bit dll.
        !            14:     This is the main source file of DB32.DLL
        !            15: 
        !            16: --*/
        !            17: 
        !            18: 
        !            19: #define W32SUT_32
        !            20: 
        !            21: #include <windows.h>
        !            22: #include <w32sut.h>
        !            23: #include <db.h>
        !            24: 
        !            25: UT32PROC  pfnUTProc=NULL;
        !            26: int       cProcessesAttached = 0;
        !            27: 
        !            28: 
        !            29: BOOL
        !            30: DllInit(HANDLE hInst, DWORD fdwReason, LPVOID lpReserved)
        !            31: {
        !            32: 
        !            33:   if ( fdwReason == DLL_PROCESS_ATTACH ) {
        !            34: 
        !            35:     /*
        !            36:      * Registration of UT need to be done only once for first
        !            37:      * attaching process.
        !            38:      */
        !            39: 
        !            40:     if ( cProcessesAttached++ ) {
        !            41:         return(TRUE);
        !            42:     }
        !            43: 
        !            44:     return UTRegister( hInst,        // DB32.DLL module handle
        !            45:                        "DB16.DLL",   // name of 16bit thunk dll
        !            46:                        NULL,         // no init routine
        !            47:                        "UTProc",     // name of 16bit dispatch routine
        !            48:                                      // exported from DB16.DLL
        !            49:                        &pfnUTProc,   // Global variable to receive thunk address
        !            50:                        NULL,         // no call back function
        !            51:                        NULL          // no shared memroy
        !            52:                      );
        !            53:   } else if ( fdwReason == DLL_PROCESS_DETACH ) {
        !            54: 
        !            55:       if ( --cProcessesAttached == 0 ) {
        !            56:           UTUnRegister( hInst );
        !            57:       }
        !            58:   }
        !            59: 
        !            60: }
        !            61: 
        !            62: /*
        !            63:  * constants for dispatcher in 16bit side
        !            64:  */
        !            65: 
        !            66: #define DB_SRV_GETVERSION   0
        !            67: #define DB_SRV_SETTIME      1
        !            68: #define DB_SRV_ADDUSER      2
        !            69: 
        !            70: 
        !            71: int
        !            72: DbGetVersion(void)
        !            73: {
        !            74: 
        !            75:     /*
        !            76:      * call the 16bit dispatch thru the 32bit thunk. no parameters
        !            77:      * are passed.
        !            78:      * returned value is the service result.
        !            79:      */
        !            80: 
        !            81:     return( (int) (* pfnUTProc)(NULL, DB_SRV_GETVERSION, NULL) );
        !            82: 
        !            83: }
        !            84: 
        !            85: void
        !            86: DbSetTime(LPDB_TIME pTime)
        !            87: {
        !            88: 
        !            89:     /*
        !            90:      * call the 16bit dispatch thru the 32bit thunk.
        !            91:      * pass one pointer to a buffer which will be translated
        !            92:      * to 16:16 address before passed to 16bit side.
        !            93:      *
        !            94:      */
        !            95: 
        !            96:     (* pfnUTProc)(pTime, DB_SRV_SETTIME, NULL);
        !            97: 
        !            98: }
        !            99: 
        !           100: short
        !           101: DbAddUser(LPDB_NAME pName, DWORD Permission, LPDWORD pId)
        !           102: {
        !           103: 
        !           104:     DWORD    Args[3];           // function has three arguments
        !           105:     PVOID    TransList[4];      // Three pointers need translation:
        !           106:                                 //     pName
        !           107:                                 //     pName->str
        !           108:                                 //     pId
        !           109:                                 // plus null to indicate end of list
        !           110:     char    *pSaveStr;
        !           111:     int     Ret;
        !           112: 
        !           113:     /*
        !           114:      * put arguments in buffer
        !           115:      */
        !           116: 
        !           117:     Args[0] = (DWORD) pName;
        !           118:     Args[1] = Permission;
        !           119:     Args[2] = (DWORD) pId;
        !           120: 
        !           121:     /*
        !           122:      * build translation list for all the flat pointers that need to
        !           123:      * be translated to segmented form.
        !           124:      */
        !           125:     TransList[0] = & Args[0];
        !           126:     TransList[1] = & pName->str;
        !           127:     TransList[2] = & Args[2];
        !           128:     TransList[3] = 0;
        !           129: 
        !           130:     /*
        !           131:      * save the original pointer in the NAME struct so it can be restored
        !           132:      * after the call to the thunk.
        !           133:      * This is required only if the caller of the service expects the
        !           134:      * structure to be left unmodified.
        !           135:      */
        !           136: 
        !           137:     pSaveStr = pName->str;
        !           138: 
        !           139:     /*
        !           140:      * call the 16bit dispatch thru the 32bit thunk.
        !           141:      * pass arguments in buffer along with list of addresses
        !           142:      * that need to be translated equivalent segmented format.
        !           143:      *
        !           144:      */
        !           145: 
        !           146:     Ret = (int) (* pfnUTProc)(Args, DB_SRV_ADDUSER, TransList);
        !           147: 
        !           148:     /*
        !           149:      * restore flat pointer
        !           150:      */
        !           151:     pName->str = pSaveStr;
        !           152: 
        !           153:     return(Ret);
        !           154: }
        !           155: 
        !           156: 

unix.superglobalmegacorp.com

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