|
|
1.1 ! root 1: /*++ ! 2: * ! 3: * VDD v1.0 ! 4: * ! 5: * Copyright (c) 1991, Microsoft Corporation ! 6: * ! 7: * VDD.C - Sample VDD for NT-MVDM ! 8: * ! 9: --*/ ! 10: #include "fax32.h" ! 11: #include "vddsvc.h" ! 12: ! 13: ! 14: USHORT Sub16CS; ! 15: USHORT Sub16IP; ! 16: ! 17: BOOL ! 18: VDDInitialize( ! 19: IN PVOID DllHandle, ! 20: IN ULONG Reason, ! 21: IN PCONTEXT Context OPTIONAL ! 22: ) ! 23: ! 24: /*++ ! 25: ! 26: Routine Description: ! 27: ! 28: ! 29: Arguments: ! 30: ! 31: DllHandle - Not Used ! 32: ! 33: Reason - Attach or Detach ! 34: ! 35: Context - Not Used ! 36: ! 37: Return Value: ! 38: ! 39: SUCCESS - TRUE ! 40: FAILURE - FALSE ! 41: ! 42: --*/ ! 43: ! 44: { ! 45: ! 46: switch ( Reason ) { ! 47: ! 48: case DLL_PROCESS_ATTACH: ! 49: // Allocate VDD's local heap if needed. Check that NT FAX driver ! 50: // is available by opening that device. ! 51: //.... ! 52: // Install user hook for callback service. ! 53: ! 54: if(!VDDInstallUserHook (DllHandle,&FAXVDDCreate, &FAXVDDTerminate, ! 55: &FAXVDDBlock, &FAXVDDResume)) ! 56: OutputDebugString("FAX32: UserHook not installed\n"); ! 57: else ! 58: OutputDebugString("FAX32: UserHook installed!\n"); ! 59: ! 60: // UserHook # 2 ! 61: if(!VDDInstallUserHook (DllHandle,&FAXVDDCreate, NULL, ! 62: NULL, &FAXVDDResume)) ! 63: OutputDebugString("FAX32: UserHook #2 not installed\n"); ! 64: else ! 65: OutputDebugString("FAX32: UserHook #2 installed!\n"); ! 66: ! 67: break; ! 68: ! 69: case DLL_PROCESS_DETACH: ! 70: // Deallocate VDD's local heap if needed ! 71: // communicate to appropriate Device driver about your departure ! 72: //... ! 73: // Deinstall user hook for callback service. ! 74: if(!VDDDeInstallUserHook (DllHandle)) ! 75: OutputDebugString("FAX32: UserHook not deinstalled\n"); ! 76: else ! 77: OutputDebugString("FAX32: UserHook deinstalled!\n"); ! 78: ! 79: break; ! 80: default: ! 81: break; ! 82: } ! 83: ! 84: return TRUE; ! 85: } ! 86: ! 87: // Sample function ! 88: VOID FAXVDDTerminate(USHORT usPDB) ! 89: { ! 90: USHORT uSaveCS, uSaveIP; ! 91: ! 92: OutputDebugString("FAX32: Terminate message\n"); ! 93: ! 94: // VDDHostSimulate ! 95: ! 96: uSaveCS = getCS(); ! 97: uSaveIP = getIP(); ! 98: setCS(Sub16CS); ! 99: setIP(Sub16IP); ! 100: VDDSimulate16(); ! 101: setCS(uSaveCS); ! 102: setIP(uSaveIP); ! 103: ! 104: } ! 105: ! 106: // Sample function ! 107: VOID FAXVDDCreate(USHORT usPDB) ! 108: { ! 109: OutputDebugString("FAX32: Create Message\n"); ! 110: } ! 111: ! 112: // Sample function ! 113: VOID FAXVDDBlock(VOID) ! 114: { ! 115: OutputDebugString("FAX32: Block Message\n"); ! 116: } ! 117: ! 118: // Sample function ! 119: VOID FAXVDDResume(VOID) ! 120: { ! 121: OutputDebugString("FAX32: Resume Message\n"); ! 122: } ! 123: ! 124: ! 125: VOID ! 126: FAXVDDTerminateVDM( ! 127: VOID ! 128: ) ! 129: /*++ ! 130: ! 131: Arguments: ! 132: ! 133: Return Value: ! 134: ! 135: SUCCESS - TRUE ! 136: FAILURE - FALSE ! 137: ! 138: --*/ ! 139: ! 140: ! 141: { ! 142: ! 143: // Cleanup any resource taken for this vdm ! 144: ! 145: ! 146: return; ! 147: } ! 148: ! 149: ! 150: VOID ! 151: FAXVDDRegisterInit( ! 152: VOID ! 153: ) ! 154: /*++ ! 155: ! 156: Arguments: ! 157: ! 158: Return Value: ! 159: ! 160: SUCCESS - TRUE ! 161: FAILURE - FALSE ! 162: ! 163: --*/ ! 164: ! 165: ! 166: { ! 167: // Save addresses for fax16 ! 168: Sub16CS = getDS(); ! 169: Sub16IP = getAX(); ! 170: ! 171: OutputDebugString("FAX32: GET_ADD\n"); ! 172: ! 173: // Called from the BOP manager. If VDDInitialize has done all the ! 174: // checking and resources alloaction, just return success. ! 175: ! 176: setCF(0); ! 177: return; ! 178: } ! 179: ! 180: ! 181: #define GET_A_FAX 1 ! 182: #define SEND_A_FAX 2 ! 183: ! 184: VOID ! 185: FAXVDDDispatch( ! 186: VOID ! 187: ) ! 188: /*++ ! 189: ! 190: Arguments: ! 191: Client (DX) = Command code ! 192: 01 - get a message from NT device driver ! 193: 02 - send a message through NT device driver ! 194: 03 - address of 16 bit routine ! 195: ! 196: Client (ES:BX) = Message Buffer ! 197: Client (CX) = Buffer Size ! 198: ! 199: Return Value: ! 200: ! 201: SUCCESS - Client Carry Clear and CX has the count transferred ! 202: FAILURE - Client Carry Set ! 203: ! 204: --*/ ! 205: ! 206: ! 207: { ! 208: PCHAR Buffer; ! 209: USHORT cb; ! 210: USHORT uCom; ! 211: BOOL Success = TRUE; // In this sample operation always succeeds ! 212: ! 213: uCom = getDX(); ! 214: ! 215: cb = getCX(); ! 216: Buffer = (PCHAR) GetVDMPointer ((ULONG)((getES() << 16)|getBX()),cb,FALSE); ! 217: switch (uCom) { ! 218: case GET_A_FAX: ! 219: // Make a DeviceIOControl or ReadFile on NT FAX driver with ! 220: // cb and Buffer.Then set CX if success. ! 221: ! 222: if (Success) { ! 223: setCX(cb); ! 224: setCF(0); ! 225: } ! 226: else ! 227: setCF(1); ! 228: ! 229: break; ! 230: ! 231: ! 232: case SEND_A_FAX: ! 233: // Make a DeviceIOControl or WriteFile on NT FAX driver with ! 234: // cb and Buffer.Then set CX if success. ! 235: ! 236: if (Success) { ! 237: setCX(cb); ! 238: setCF(0); ! 239: } ! 240: else ! 241: setCF(1); ! 242: ! 243: break; ! 244: default: ! 245: setCF(1); ! 246: } ! 247: return; ! 248: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.