ITek_asm.asm
上传用户:cnfair
上传日期:2007-01-07
资源大小:32k
文件大小:3k
源码类别:

驱动编程

开发平台:

Visual C++

  1. .LALL
  2. ; written by Sang-Eun Han
  3. ;
  4. ;
  5. TITLE ITEK
  6. .386P
  7. .XLIST
  8. include vmm.inc
  9. include ndis.inc
  10. include netvxd.inc
  11. include vwin32.inc
  12. include debug.inc
  13. .LIST
  14. EXTRN _OnSysDynamicDeviceInit@0:PROC
  15. EXTRN  _OnSysDynamicDeviceExit@0:PROC
  16. DECLARE_VIRTUAL_DEVICE %MAC, 3, 10, <%MAC>_Control, Undefined_Device_Id, 
  17. MAC_Init_Order
  18. ;data
  19. IFDEF CHICAGO
  20. VxD_LOCKED_DATA_SEG
  21. Public bInitAlready
  22. bInitAlready  DB 0
  23. VxD_LOCKED_DATA_ENDS
  24. ENDIF
  25. ; code
  26. VxD_LOCKED_CODE_SEG
  27. ;----------------------------------------------------------------------------------
  28. Begin_Control_Dispatch %MAC
  29.         Control_Dispatch Device_Init, OnSysDynamicDeviceInitWrap
  30.         Control_Dispatch Sys_Dynamic_Device_Init, OnSysDynamicDeviceInitWrap
  31.         Control_Dispatch Sys_Dynamic_Device_Exit, OnSysDynamicDeviceExitWrap
  32.         Control_Dispatch W32_DeviceIoControl, OnW32DeviceIoControl, sCall, <ecx, ebx, edx, esi>
  33. End_Control_Dispatch %MAC
  34. VxD_LOCKED_CODE_ENDS
  35. ;----------------------------------------------------------------------------------
  36. ;
  37. ;   OnSysDynamicDeviceInitWrap
  38. ;
  39. ;----------------------------------------------------------------------------------
  40. BeginProc OnSysDynamicDeviceInitWrap, init
  41. IFDEF CHICAGO
  42.     mov  al, bInitAlready
  43. cmp  al, 0 ; Make sure we' haven't been called already.
  44. jnz  Succeed_Init_Phase
  45. inc  bInitAlready ; Set the "Called Already" Flag
  46. ENDIF
  47. ; Make sure the wrapper (Ndis.386) is loaded
  48.      VxDcall NdisGetVersion
  49. jc Fail_Init_Phase
  50. call  _OnSysDynamicDeviceInit@0
  51. cmp   eax, NDIS_STATUS_SUCCESS
  52. jne   Fail_Init_Phase
  53. ; Success
  54. Succeed_Init_Phase:
  55. clc
  56. ret
  57. Fail_Init_Phase:
  58. stc
  59. ret
  60. EndProc OnSysDynamicDeviceInitWrap
  61. ;----------------------------------------------------------------------------------
  62. ;
  63. ;   OnSysDynamicDeviceExitWrap
  64. ;
  65. ;----------------------------------------------------------------------------------
  66. BeginProc OnSysDynamicDeviceExitWrap, locked
  67. call _OnSysDynamicDeviceExit@0
  68. clc
  69. ret
  70. EndProc OnSysDynamicDeviceExitWrap
  71.         END
  72. ;----------------------------------------------------------------------------------
  73. ;
  74. ; R E A L   M O D E   I N I T   C O D E
  75. ;
  76. ; MAC_Real_Init
  77. ; DESCRIPTION:
  78. ; ENTRY:
  79. ; EXIT:
  80. ; USES:
  81. ;
  82. ; Comments: Is there anybody who knows the funtionality of these codes?
  83. ;----------------------------------------------------------------------------------
  84. VxD_REAL_INIT_SEG
  85. BeginProc MAC_Real_Init
  86. ;
  87. ;   If another us is loaded then don't load -- Just abort our load
  88. ;
  89.      test    bx, Duplicate_From_INT2F OR Duplicate_Device_ID
  90.      jnz     SHORT Ndis_RI_Abort_Load
  91. ;   No other  is loaded.
  92.      xor     bx, bx
  93.      xor     si, si
  94.      mov     ax, Device_Load_Ok
  95.      ret
  96. Ndis_RI_Abort_Load:
  97.      xor     bx, bx
  98.      xor     si, si
  99.      mov     ax, Abort_Device_Load
  100.      ret
  101. EndProc MAC_Real_Init
  102. VxD_REAL_INIT_ENDS
  103. END MAC_Real_Init