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

📄 isr.cod

📁 怎样在win2000下构造驱动程序znsoft_Serial2000_demo.ZIP
💻 COD
📖 第 1 页 / 共 5 页
字号:

  002a0	6a 01		 push	 1
  002a2	56		 push	 esi
  002a3	e8 00 00 00 00	 call	 _SerialHandleModemUpdate@8
$L14963:

; 762  : 
; 763  :                         }
; 764  : 
; 765  :                         //
; 766  :                         // We can only send the xon character if
; 767  :                         // the only reason we are holding is because
; 768  :                         // of the xoff.  (Hardware flow control or
; 769  :                         // sending break preclude putting a new character
; 770  :                         // on the wire.)
; 771  :                         //
; 772  : 
; 773  :                         if (Extension->SendXonChar &&
; 774  :                             !(Extension->TXHolding & ~SERIAL_TX_XOFF)) {

  002a8	80 be db 01 00
	00 00		 cmp	 BYTE PTR [esi+475], 0
  002af	0f 84 96 00 00
	00		 je	 $L14965
  002b5	f7 86 1c 01 00
	00 f7 ff ff ff	 test	 DWORD PTR [esi+284], -9	; fffffff7H
  002bf	0f 85 86 00 00
	00		 jne	 $L14965

; 775  : 
; 776  :                             if ((Extension->HandFlow.FlowReplace &
; 777  :                                  SERIAL_RTS_MASK) ==
; 778  :                                  SERIAL_TRANSMIT_TOGGLE) {

  002c5	8b 86 78 01 00
	00		 mov	 eax, DWORD PTR [esi+376]
  002cb	66 25 c0 00	 and	 ax, 192			; 000000c0H
  002cf	3c c0		 cmp	 al, 192			; 000000c0H
  002d1	75 3c		 jne	 SHORT $L14968

; 779  : 
; 780  :                                 //
; 781  :                                 // We have to raise if we're sending
; 782  :                                 // this character.
; 783  :                                 //
; 784  : 
; 785  :                                 SerialSetRTS(Extension);

  002d3	56		 push	 esi
  002d4	e8 00 00 00 00	 call	 _SerialSetRTS@4

; 786  : 
; 787  :                                 Extension->PerfStats.TransmittedCount++;
; 788  :                                 Extension->WmiPerfData.TransmittedCount++;
; 789  :                                 WRITE_TRANSMIT_HOLDING(
; 790  :                                     Extension->Controller,
; 791  :                                     Extension->SpecialChars.XonChar
; 792  :                                     );

  002d9	8a 86 70 01 00
	00		 mov	 al, BYTE PTR [esi+368]
  002df	ff 86 88 01 00
	00		 inc	 DWORD PTR [esi+392]
  002e5	ff 86 1c 06 00
	00		 inc	 DWORD PTR [esi+1564]
  002eb	50		 push	 eax
  002ec	ff b6 98 00 00
	00		 push	 DWORD PTR [esi+152]
  002f2	ff d7		 call	 edi

; 793  : 
; 794  :                                 SerialInsertQueueDpc(
; 795  :                                     &Extension->StartTimerLowerRTSDpc,
; 796  :                                     NULL,
; 797  :                                     NULL,
; 798  :                                     Extension
; 799  :                                     )?Extension->CountOfTryingToLowerRTS++:0;

  002f4	56		 push	 esi
  002f5	53		 push	 ebx
  002f6	8d 86 4c 03 00
	00		 lea	 eax, DWORD PTR [esi+844]
  002fc	53		 push	 ebx
  002fd	50		 push	 eax
  002fe	e8 00 00 00 00	 call	 _SerialInsertQueueDpc@16
  00303	84 c0		 test	 al, al
  00305	74 23		 je	 SHORT $L14978
  00307	ff 86 3c 01 00
	00		 inc	 DWORD PTR [esi+316]

; 800  : 
; 801  : 
; 802  :                             } else {

  0030d	eb 1b		 jmp	 SHORT $L14978
$L14968:

; 803  : 
; 804  :                                 Extension->PerfStats.TransmittedCount++;
; 805  :                                 Extension->WmiPerfData.TransmittedCount++;
; 806  :                                 WRITE_TRANSMIT_HOLDING(
; 807  :                                     Extension->Controller,
; 808  :                                     Extension->SpecialChars.XonChar
; 809  :                                     );

  0030f	8a 86 70 01 00
	00		 mov	 al, BYTE PTR [esi+368]
  00315	ff 86 88 01 00
	00		 inc	 DWORD PTR [esi+392]
  0031b	ff 86 1c 06 00
	00		 inc	 DWORD PTR [esi+1564]
  00321	50		 push	 eax
  00322	ff b6 98 00 00
	00		 push	 DWORD PTR [esi+152]
  00328	ff d7		 call	 edi
$L14978:

; 810  : 
; 811  :                             }
; 812  : 
; 813  : 
; 814  :                             Extension->SendXonChar = FALSE;

  0032a	80 a6 db 01 00
	00 00		 and	 BYTE PTR [esi+475], 0

; 815  :                             Extension->HoldingEmpty = FALSE;

  00331	80 a6 a0 01 00
	00 00		 and	 BYTE PTR [esi+416], 0

; 816  : 
; 817  :                             //
; 818  :                             // If we send an xon, by definition we
; 819  :                             // can't be holding by Xoff.
; 820  :                             //
; 821  : 
; 822  :                             Extension->TXHolding &= ~SERIAL_TX_XOFF;

  00338	83 a6 1c 01 00
	00 f7		 and	 DWORD PTR [esi+284], -9	; fffffff7H

; 823  : 
; 824  :                             //
; 825  :                             // If we are sending an xon char then
; 826  :                             // by definition we can't be "holding"
; 827  :                             // up reception by Xoff.
; 828  :                             //
; 829  : 
; 830  :                             Extension->RXHolding &= ~SERIAL_RX_XOFF;

  0033f	83 a6 20 01 00
	00 fd		 and	 DWORD PTR [esi+288], -3	; fffffffdH

; 831  : 
; 832  :                         } else if (Extension->SendXoffChar &&

  00346	e9 cb fe ff ff	 jmp	 $L14916
$L14965:

; 833  :                               !Extension->TXHolding) {

  0034b	80 be dc 01 00
	00 00		 cmp	 BYTE PTR [esi+476], 0
  00352	0f 84 b6 00 00
	00		 je	 $L14983
  00358	39 9e 1c 01 00
	00		 cmp	 DWORD PTR [esi+284], ebx
  0035e	0f 85 aa 00 00
	00		 jne	 $L14983

; 834  : 
; 835  :                             if ((Extension->HandFlow.FlowReplace &
; 836  :                                  SERIAL_RTS_MASK) ==
; 837  :                                  SERIAL_TRANSMIT_TOGGLE) {

  00364	8b 86 78 01 00
	00		 mov	 eax, DWORD PTR [esi+376]
  0036a	66 25 c0 00	 and	 ax, 192			; 000000c0H
  0036e	3c c0		 cmp	 al, 192			; 000000c0H
  00370	75 3c		 jne	 SHORT $L14986

; 838  : 
; 839  :                                 //
; 840  :                                 // We have to raise if we're sending
; 841  :                                 // this character.
; 842  :                                 //
; 843  : 
; 844  :                                 SerialSetRTS(Extension);

  00372	56		 push	 esi
  00373	e8 00 00 00 00	 call	 _SerialSetRTS@4

; 845  : 
; 846  :                                 Extension->PerfStats.TransmittedCount++;
; 847  :                                 Extension->WmiPerfData.TransmittedCount++;
; 848  :                                 WRITE_TRANSMIT_HOLDING(
; 849  :                                     Extension->Controller,
; 850  :                                     Extension->SpecialChars.XoffChar
; 851  :                                     );

  00378	8a 86 71 01 00
	00		 mov	 al, BYTE PTR [esi+369]
  0037e	ff 86 88 01 00
	00		 inc	 DWORD PTR [esi+392]
  00384	ff 86 1c 06 00
	00		 inc	 DWORD PTR [esi+1564]
  0038a	50		 push	 eax
  0038b	ff b6 98 00 00
	00		 push	 DWORD PTR [esi+152]
  00391	ff d7		 call	 edi

; 852  : 
; 853  :                                 SerialInsertQueueDpc(
; 854  :                                     &Extension->StartTimerLowerRTSDpc,
; 855  :                                     NULL,
; 856  :                                     NULL,
; 857  :                                     Extension
; 858  :                                     )?Extension->CountOfTryingToLowerRTS++:0;

  00393	56		 push	 esi
  00394	53		 push	 ebx
  00395	8d 86 4c 03 00
	00		 lea	 eax, DWORD PTR [esi+844]
  0039b	53		 push	 ebx
  0039c	50		 push	 eax
  0039d	e8 00 00 00 00	 call	 _SerialInsertQueueDpc@16
  003a2	84 c0		 test	 al, al
  003a4	74 23		 je	 SHORT $L14996
  003a6	ff 86 3c 01 00
	00		 inc	 DWORD PTR [esi+316]

; 859  : 
; 860  :                             } else {

  003ac	eb 1b		 jmp	 SHORT $L14996
$L14986:

; 861  : 
; 862  :                                 Extension->PerfStats.TransmittedCount++;
; 863  :                                 Extension->WmiPerfData.TransmittedCount++;
; 864  :                                 WRITE_TRANSMIT_HOLDING(
; 865  :                                     Extension->Controller,
; 866  :                                     Extension->SpecialChars.XoffChar
; 867  :                                     );

  003ae	8a 86 71 01 00
	00		 mov	 al, BYTE PTR [esi+369]
  003b4	ff 86 88 01 00
	00		 inc	 DWORD PTR [esi+392]
  003ba	ff 86 1c 06 00
	00		 inc	 DWORD PTR [esi+1564]
  003c0	50		 push	 eax
  003c1	ff b6 98 00 00
	00		 push	 DWORD PTR [esi+152]
  003c7	ff d7		 call	 edi
$L14996:

; 868  : 
; 869  :                             }
; 870  : 
; 871  :                             //
; 872  :                             // We can't be sending an Xoff character
; 873  :                             // if the transmission is already held
; 874  :                             // up because of Xoff.  Therefore, if we
; 875  :                             // are holding then we can't send the char.
; 876  :                             //
; 877  : 
; 878  :                             //
; 879  :                             // If the application has set xoff continue
; 880  :                             // mode then we don't actually stop sending
; 881  :                             // characters if we send an xoff to the other
; 882  :                             // side.
; 883  :                             //
; 884  : 
; 885  :                             if (!(Extension->HandFlow.FlowReplace &
; 886  :                                   SERIAL_XOFF_CONTINUE)) {

  003c9	8b 86 78 01 00
	00		 mov	 eax, DWORD PTR [esi+376]
  003cf	85 c0		 test	 eax, eax
  003d1	78 28		 js	 SHORT $L15268

; 887  : 
; 888  :                                 Extension->TXHolding |= SERIAL_TX_XOFF;

  003d3	83 8e 1c 01 00
	00 08		 or	 DWORD PTR [esi+284], 8

; 889  : 
; 890  :                                 if ((Extension->HandFlow.FlowReplace &
; 891  :                                      SERIAL_RTS_MASK) ==
; 892  :                                      SERIAL_TRANSMIT_TOGGLE) {

  003da	66 25 c0 00	 and	 ax, 192			; 000000c0H
  003de	3c c0		 cmp	 al, 192			; 000000c0H
  003e0	75 19		 jne	 SHORT $L15268

; 893  : 
; 894  :                                     SerialInsertQueueDpc(
; 895  :                                         &Extension->StartTimerLowerRTSDpc,
; 896  :                                         NULL,
; 897  :                                         NULL,
; 898  :                                         Extension
; 899  :                                         )?Extension->CountOfTryingToLowerRTS++:0;

  003e2	56		 push	 esi
  003e3	53		 push	 ebx
  003e4	8d 86 4c 03 00
	00		 lea	 eax, DWORD PTR [esi+844]
  003ea	53		 push	 ebx
  003eb	50		 push	 eax
  003ec	e8 00 00 00 00	 call	 _SerialInsertQueueDpc@16
  003f1	84 c0		 test	 al, al
  003f3	74 06		 je	 SHORT $L15268
  003f5	ff 86 3c 01 00
	00		 inc	 DWORD PTR [esi+316]
$L15268:

; 900  : 
; 901  :                                 }
; 902  : 
; 903  :                             }
; 904  : 
; 905  :                             Extension->SendXoffChar = FALSE;

  003fb	80 a6 dc 01 00
	00 00		 and	 BYTE PTR [esi+476], 0

; 906  :                             Extension->HoldingEmpty = FALSE;

  00402	80 a6 a0 01 00
	00 00		 and	 BYTE PTR [esi+416], 0

; 907  : 
; 908  :                         //
; 909  :                         // Even if transmission is being held
; 910  :                         // up, we should still transmit an immediate
; 911  :                         // character if all that is holding us
; 912  :                         // up is xon/xoff (OS/2 rules).
; 913  :                         //
; 914  : 
; 915  :                         } else if (Extension->TransmitImmediate &&

  00409	e9 08 fe ff ff	 jmp	 $L14916
$L14983:

; 916  :                             (!Extension->TXHolding ||
; 917  :                              (Extension->TXHolding == SERIAL_TX_XOFF)
; 918  :                             )) {

  0040e	8d 86 a1 01 00
	00		 lea	 eax, DWORD PTR [esi+417]
  00414	80 38 00	 cmp	 BYTE PTR [eax], 0
  00417	0f 84 96 00 00
	00		 je	 $L15008
  0041d	8b 8e 1c 01 00
	00		 mov	 ecx, DWORD PTR [esi+284]
  00423	3b cb		 cmp	 ecx, ebx
  00425	74 09		 je	 SHORT $L15009
  00427	83 f9 08	 cmp	 ecx, 8
  0042a	0f 85 83 00 00
	00		 jne	 $L15008
$L15009:

; 919  : 
; 920  :                             Extension->TransmitImmediate = FALSE;

  00430	80 20 00	 and	 BYTE PTR [eax], 0

; 921  : 
; 922  :                             if ((Extension->HandFlow.FlowReplace &
; 923  :                                  SERIAL_RTS_MASK) ==
; 924  :                                  SERIAL_TRANSMIT_TOGGLE) {

  00433	8b 86 78 01 00
	00		 mov	 eax, DWORD PTR [esi+376]
  00439	66 25 c0 00	 and	 ax, 192			; 000000c0H
  0043d	3c c0		 cmp	 al, 192			; 000000c0H
  0043f	75 3c		 jne	 SHORT $L15012

; 925  : 
; 926  :                                 //
; 927  :                                 // We have to raise if we're sending
; 928  :                                 // this character.
; 929  :                                 //
; 930  : 
; 931  :                                 SerialSetRTS(Extension);

  00441	56		 push	 esi
  00442	e8 00 00 00 00	 call	 _SerialSetRTS@4

; 932  : 
; 933  :                                 Extension->PerfStats.TransmittedCount++;
; 934  :                                 Extension->WmiPerfData.TransmittedCount++;
; 935  :                                 WRITE_TRANSMIT_HOLDING(
; 936  :                                     Extension->Controller,
; 937  :                                     Extension->ImmediateChar
; 938  :                                     );

  00447	8a 86 d8 01 00
	00		 mov	 al, BYTE PTR [esi+472]
  0044d	ff 86 88 01 00
	00		 inc	 DWORD PTR [esi+392]
  00453	ff 86 1c 06 00
	00		 inc	 DWORD PTR [esi+1564]
  00459	50		 push	 eax
  0045a	ff b6 98 00 00
	00		 push	 DWORD PTR [esi+152]
  00460	ff d7		 call	 edi

⌨️ 快捷键说明

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