⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 modmflow.cod

📁 怎样在win2000下构造驱动程序znsoft_Serial2000_demo.ZIP
💻 COD
📖 第 1 页 / 共 5 页
字号:
; Listing generated by Microsoft (R) Optimizing Compiler Version 12.00.9044.0 

	TITLE	F:\W2DDK\src\kernel\serial\modmflow.c
	.386P
include listing.inc
if @Version gt 510
.model FLAT
else
_TEXT	SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT	ENDS
_DATA	SEGMENT DWORD USE32 PUBLIC 'DATA'
_DATA	ENDS
CONST	SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST	ENDS
_BSS	SEGMENT DWORD USE32 PUBLIC 'BSS'
_BSS	ENDS
$$SYMBOLS	SEGMENT BYTE USE32 'DEBSYM'
$$SYMBOLS	ENDS
$$TYPES	SEGMENT BYTE USE32 'DEBTYP'
$$TYPES	ENDS
_TLS	SEGMENT DWORD USE32 PUBLIC 'TLS'
_TLS	ENDS
;	COMDAT _RtlConvertLongToLargeInteger@4
_TEXT	SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT	ENDS
;	COMDAT _SerialSetDTR@4
_TEXT	SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT	ENDS
;	COMDAT _SerialClrDTR@4
_TEXT	SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT	ENDS
;	COMDAT _SerialSetRTS@4
_TEXT	SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT	ENDS
;	COMDAT _SerialClrRTS@4
_TEXT	SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT	ENDS
;	COMDAT _SerialSetupNewHandFlow@8
_TEXT	SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT	ENDS
;	COMDAT _SerialSetHandFlow@4
_TEXT	SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT	ENDS
;	COMDAT _SerialTurnOnBreak@4
_TEXT	SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT	ENDS
;	COMDAT _SerialTurnOffBreak@4
_TEXT	SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT	ENDS
;	COMDAT _SerialPretendXoff@4
_TEXT	SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT	ENDS
;	COMDAT _SerialPretendXon@4
_TEXT	SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT	ENDS
;	COMDAT _SerialHandleReducedIntBuffer@4
_TEXT	SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT	ENDS
;	COMDAT _SerialProdXonXoff@8
_TEXT	SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT	ENDS
;	COMDAT _SerialHandleModemUpdate@8
_TEXT	SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT	ENDS
;	COMDAT _SerialPerhapsLowerRTS@4
_TEXT	SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT	ENDS
;	COMDAT _SerialStartTimerLowerRTS@16
_TEXT	SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT	ENDS
;	COMDAT _SerialInvokePerhapsLowerRTS@16
_TEXT	SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT	ENDS
;	COMDAT _SerialDecrementRTSCounter@4
_TEXT	SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT	ENDS
FLAT	GROUP _DATA, CONST, _BSS
	ASSUME	CS: FLAT, DS: FLAT, SS: FLAT
endif

INCLUDELIB LIBC
INCLUDELIB OLDNAMES

PUBLIC	_SerialSetDTR@4
EXTRN	__imp__WRITE_PORT_UCHAR@8:NEAR
EXTRN	_SerialDebugLevel:DWORD
EXTRN	_DbgPrint:NEAR
EXTRN	__imp__READ_PORT_UCHAR@4:NEAR
;	COMDAT _SerialSetDTR@4
; File f:\w2ddk\src\kernel\serial\modmflow.c
_TEXT	SEGMENT
$SG14817 DB	'SERIAL: Setting DTR for %x', 0aH, 00H
; Function compile flags: /Ogs
_Context$ = 8
_ModemControl$ = 8
_SerialSetDTR@4 PROC NEAR				; COMDAT

; 81   : {

  0001c	55		 push	 ebp
  0001d	8b ec		 mov	 ebp, esp
  0001f	56		 push	 esi

; 82   : 
; 83   :     PSERIAL_DEVICE_EXTENSION Extension = Context;
; 84   :     UCHAR ModemControl;
; 85   : 
; 86   :     ModemControl = READ_MODEM_CONTROL(Extension->Controller);

  00020	8b 75 08	 mov	 esi, DWORD PTR _Context$[ebp]
  00023	8b 86 98 00 00
	00		 mov	 eax, DWORD PTR [esi+152]
  00029	83 c0 04	 add	 eax, 4
  0002c	50		 push	 eax
  0002d	ff 15 00 00 00
	00		 call	 DWORD PTR __imp__READ_PORT_UCHAR@4

; 87   : 
; 88   :     ModemControl |= SERIAL_MCR_DTR;

  00033	0c 01		 or	 al, 1

; 89   : 
; 90   :     SerialDump(
; 91   :         SERFLOW,
; 92   :         ("SERIAL: Setting DTR for %x\n",
; 93   :          Extension->Controller)
; 94   :         );

  00035	f6 05 03 00 00
	00 20		 test	 BYTE PTR _SerialDebugLevel+3, 32 ; 00000020H
  0003c	88 45 08	 mov	 BYTE PTR _ModemControl$[ebp], al
  0003f	74 12		 je	 SHORT $L14812
  00041	ff b6 98 00 00
	00		 push	 DWORD PTR [esi+152]
  00047	68 00 00 00 00	 push	 OFFSET FLAT:$SG14817
  0004c	e8 00 00 00 00	 call	 _DbgPrint
  00051	59		 pop	 ecx
  00052	59		 pop	 ecx
$L14812:

; 95   :     WRITE_MODEM_CONTROL(
; 96   :         Extension->Controller,
; 97   :         ModemControl
; 98   :         );

  00053	8b 86 98 00 00
	00		 mov	 eax, DWORD PTR [esi+152]
  00059	ff 75 08	 push	 DWORD PTR _ModemControl$[ebp]
  0005c	83 c0 04	 add	 eax, 4
  0005f	50		 push	 eax
  00060	ff 15 00 00 00
	00		 call	 DWORD PTR __imp__WRITE_PORT_UCHAR@8

; 99   : 
; 100  :     return FALSE;

  00066	32 c0		 xor	 al, al
  00068	5e		 pop	 esi

; 101  : 
; 102  : }

  00069	5d		 pop	 ebp
  0006a	c2 04 00	 ret	 4
_SerialSetDTR@4 ENDP
_TEXT	ENDS
PUBLIC	_SerialClrDTR@4
;	COMDAT _SerialClrDTR@4
_TEXT	SEGMENT
$SG14840 DB	'SERIAL: Clearing DTR for %x', 0aH, 00H
; Function compile flags: /Ogs
_Context$ = 8
_ModemControl$ = 8
_SerialClrDTR@4 PROC NEAR				; COMDAT

; 126  : {

  0001d	55		 push	 ebp
  0001e	8b ec		 mov	 ebp, esp
  00020	56		 push	 esi

; 127  : 
; 128  :     PSERIAL_DEVICE_EXTENSION Extension = Context;
; 129  :     UCHAR ModemControl;
; 130  : 
; 131  :     ModemControl = READ_MODEM_CONTROL(Extension->Controller);

  00021	8b 75 08	 mov	 esi, DWORD PTR _Context$[ebp]
  00024	8b 86 98 00 00
	00		 mov	 eax, DWORD PTR [esi+152]
  0002a	83 c0 04	 add	 eax, 4
  0002d	50		 push	 eax
  0002e	ff 15 00 00 00
	00		 call	 DWORD PTR __imp__READ_PORT_UCHAR@4

; 132  : 
; 133  :     ModemControl &= ~SERIAL_MCR_DTR;

  00034	24 fe		 and	 al, 254			; 000000feH

; 134  : 
; 135  :     SerialDump(
; 136  :         SERFLOW,
; 137  :         ("SERIAL: Clearing DTR for %x\n",
; 138  :          Extension->Controller)
; 139  :         );

  00036	f6 05 03 00 00
	00 20		 test	 BYTE PTR _SerialDebugLevel+3, 32 ; 00000020H
  0003d	88 45 08	 mov	 BYTE PTR _ModemControl$[ebp], al
  00040	74 12		 je	 SHORT $L14835
  00042	ff b6 98 00 00
	00		 push	 DWORD PTR [esi+152]
  00048	68 00 00 00 00	 push	 OFFSET FLAT:$SG14840
  0004d	e8 00 00 00 00	 call	 _DbgPrint
  00052	59		 pop	 ecx
  00053	59		 pop	 ecx
$L14835:

; 140  :     WRITE_MODEM_CONTROL(
; 141  :         Extension->Controller,
; 142  :         ModemControl
; 143  :         );

  00054	8b 86 98 00 00
	00		 mov	 eax, DWORD PTR [esi+152]
  0005a	ff 75 08	 push	 DWORD PTR _ModemControl$[ebp]
  0005d	83 c0 04	 add	 eax, 4
  00060	50		 push	 eax
  00061	ff 15 00 00 00
	00		 call	 DWORD PTR __imp__WRITE_PORT_UCHAR@8

; 144  : 
; 145  :     return FALSE;

  00067	32 c0		 xor	 al, al
  00069	5e		 pop	 esi

; 146  : 
; 147  : }

  0006a	5d		 pop	 ebp
  0006b	c2 04 00	 ret	 4
_SerialClrDTR@4 ENDP
_TEXT	ENDS
PUBLIC	_SerialSetRTS@4
;	COMDAT _SerialSetRTS@4
_TEXT	SEGMENT
$SG14863 DB	'SERIAL: Setting Rts for %x', 0aH, 00H
; Function compile flags: /Ogs
_Context$ = 8
_ModemControl$ = 8
_SerialSetRTS@4 PROC NEAR				; COMDAT

; 171  : {

  0001c	55		 push	 ebp
  0001d	8b ec		 mov	 ebp, esp
  0001f	56		 push	 esi

; 172  : 
; 173  :     PSERIAL_DEVICE_EXTENSION Extension = Context;
; 174  :     UCHAR ModemControl;
; 175  : 
; 176  :     ModemControl = READ_MODEM_CONTROL(Extension->Controller);

  00020	8b 75 08	 mov	 esi, DWORD PTR _Context$[ebp]
  00023	8b 86 98 00 00
	00		 mov	 eax, DWORD PTR [esi+152]
  00029	83 c0 04	 add	 eax, 4
  0002c	50		 push	 eax
  0002d	ff 15 00 00 00
	00		 call	 DWORD PTR __imp__READ_PORT_UCHAR@4

; 177  : 
; 178  :     ModemControl |= SERIAL_MCR_RTS;

  00033	0c 02		 or	 al, 2

; 179  : 
; 180  :     SerialDump(
; 181  :         SERFLOW,
; 182  :         ("SERIAL: Setting Rts for %x\n",
; 183  :          Extension->Controller)
; 184  :         );

  00035	f6 05 03 00 00
	00 20		 test	 BYTE PTR _SerialDebugLevel+3, 32 ; 00000020H
  0003c	88 45 08	 mov	 BYTE PTR _ModemControl$[ebp], al
  0003f	74 12		 je	 SHORT $L14858
  00041	ff b6 98 00 00
	00		 push	 DWORD PTR [esi+152]
  00047	68 00 00 00 00	 push	 OFFSET FLAT:$SG14863
  0004c	e8 00 00 00 00	 call	 _DbgPrint
  00051	59		 pop	 ecx
  00052	59		 pop	 ecx
$L14858:

; 185  :     WRITE_MODEM_CONTROL(
; 186  :         Extension->Controller,
; 187  :         ModemControl
; 188  :         );

  00053	8b 86 98 00 00
	00		 mov	 eax, DWORD PTR [esi+152]
  00059	ff 75 08	 push	 DWORD PTR _ModemControl$[ebp]
  0005c	83 c0 04	 add	 eax, 4
  0005f	50		 push	 eax
  00060	ff 15 00 00 00
	00		 call	 DWORD PTR __imp__WRITE_PORT_UCHAR@8

; 189  : 
; 190  :     return FALSE;

  00066	32 c0		 xor	 al, al
  00068	5e		 pop	 esi

; 191  : 
; 192  : }

  00069	5d		 pop	 ebp
  0006a	c2 04 00	 ret	 4
_SerialSetRTS@4 ENDP
_TEXT	ENDS
PUBLIC	_SerialClrRTS@4
;	COMDAT _SerialClrRTS@4
_TEXT	SEGMENT
$SG14886 DB	'SERIAL: Clearing Rts for %x', 0aH, 00H
; Function compile flags: /Ogs
_Context$ = 8
_ModemControl$ = 8
_SerialClrRTS@4 PROC NEAR				; COMDAT

; 216  : {

  0001d	55		 push	 ebp
  0001e	8b ec		 mov	 ebp, esp
  00020	56		 push	 esi

; 217  : 
; 218  :     PSERIAL_DEVICE_EXTENSION Extension = Context;
; 219  :     UCHAR ModemControl;
; 220  : 
; 221  :     ModemControl = READ_MODEM_CONTROL(Extension->Controller);

  00021	8b 75 08	 mov	 esi, DWORD PTR _Context$[ebp]
  00024	8b 86 98 00 00
	00		 mov	 eax, DWORD PTR [esi+152]
  0002a	83 c0 04	 add	 eax, 4
  0002d	50		 push	 eax
  0002e	ff 15 00 00 00
	00		 call	 DWORD PTR __imp__READ_PORT_UCHAR@4

; 222  : 
; 223  :     ModemControl &= ~SERIAL_MCR_RTS;

  00034	24 fd		 and	 al, 253			; 000000fdH

; 224  : 
; 225  :     SerialDump(
; 226  :         SERFLOW,
; 227  :         ("SERIAL: Clearing Rts for %x\n",
; 228  :          Extension->Controller)
; 229  :         );

  00036	f6 05 03 00 00
	00 20		 test	 BYTE PTR _SerialDebugLevel+3, 32 ; 00000020H
  0003d	88 45 08	 mov	 BYTE PTR _ModemControl$[ebp], al
  00040	74 12		 je	 SHORT $L14881
  00042	ff b6 98 00 00
	00		 push	 DWORD PTR [esi+152]
  00048	68 00 00 00 00	 push	 OFFSET FLAT:$SG14886
  0004d	e8 00 00 00 00	 call	 _DbgPrint
  00052	59		 pop	 ecx
  00053	59		 pop	 ecx
$L14881:

; 230  :     WRITE_MODEM_CONTROL(
; 231  :         Extension->Controller,
; 232  :         ModemControl
; 233  :         );

  00054	8b 86 98 00 00
	00		 mov	 eax, DWORD PTR [esi+152]
  0005a	ff 75 08	 push	 DWORD PTR _ModemControl$[ebp]
  0005d	83 c0 04	 add	 eax, 4
  00060	50		 push	 eax
  00061	ff 15 00 00 00
	00		 call	 DWORD PTR __imp__WRITE_PORT_UCHAR@8

; 234  : 
; 235  :     return FALSE;

  00067	32 c0		 xor	 al, al
  00069	5e		 pop	 esi

; 236  : 
; 237  : }

  0006a	5d		 pop	 ebp
  0006b	c2 04 00	 ret	 4
_SerialClrRTS@4 ENDP
_TEXT	ENDS
PUBLIC	_SerialSetupNewHandFlow@8
PUBLIC	_SerialProdXonXoff@8
PUBLIC	_SerialPerhapsLowerRTS@4
EXTRN	_SerialProcessLSR@4:NEAR
;	COMDAT _SerialSetupNewHandFlow@8
_TEXT	SEGMENT
$SG14913 DB	'SERIAL: Processing DTR flow for %x', 0aH, 00H
$SG14936 DB	'SERIAL: Removing DTR block on reception for %x', 0aH, 00H
$SG14952 DB	'SERIAL: Setting DTR block on reception for %x', 0aH, 00H
	ORG $+1
$SG14969 DB	'SERIAL: Removing dtr block of reception for %x', 0aH, 00H
$SG14986 DB	'SERIAL: removing dtr block of reception for %x', 0aH, 00H
$SG15004 DB	'SERIAL: Processing RTS flow', 0aH, 00H
	ORG $+3
$SG15025 DB	'SERIAL: Removing rts block of reception for %x', 0aH, 00H
$SG15041 DB	'SERIAL: Setting rts block of reception for %x', 0aH, 00H
	ORG $+1
$SG15061 DB	'SERIAL: Clearing rts block of reception for %x', 0aH, 00H
$SG15081 DB	'SERIAL: TOGGLE Clearing rts block of reception for %x', 0aH
	DB	00H
	ORG $+1
$SG15105 DB	'SERIAL: Clearing rts block of reception for %x', 0aH, 00H
; Function compile flags: /Ogs
_Extension$ = 8
_NewHandFlow$ = 12
_New$ = -16
_SerialSetupNewHandFlow@8 PROC NEAR			; COMDAT

; 266  : {

  001fc	55		 push	 ebp
  001fd	8b ec		 mov	 ebp, esp
  001ff	83 ec 10	 sub	 esp, 16			; 00000010H
  00202	53		 push	 ebx
  00203	56		 push	 esi

; 267  : 
; 268  :     SERIAL_HANDFLOW New = *NewHandFlow;

  00204	8b 75 0c	 mov	 esi, DWORD PTR _NewHandFlow$[ebp]
  00207	57		 push	 edi
  00208	8d 7d f0	 lea	 edi, DWORD PTR _New$[ebp]
  0020b	a5		 movsd
  0020c	a5		 movsd
  0020d	a5		 movsd
  0020e	a5		 movsd

; 269  : 
; 270  :     //
; 271  :     // If the Extension->DeviceIsOpened is FALSE that means
; 272  :     // we are entering this routine in response to an open request.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -