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

📄 flush.cod

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

	TITLE	F:\W2DDK\src\kernel\serial\flush.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
PAGESRP0	SEGMENT PARA USE32 PUBLIC ''
PAGESRP0	ENDS
;	COMDAT _RtlConvertLongToLargeInteger@4
_TEXT	SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT	ENDS
;	COMDAT _SerialFlush@8
PAGESRP0	SEGMENT PARA USE32 PUBLIC ''
PAGESRP0	ENDS
;	COMDAT _SerialStartFlush@4
PAGESRP0	SEGMENT PARA USE32 PUBLIC ''
PAGESRP0	ENDS
FLAT	GROUP _DATA, CONST, _BSS
	ASSUME	CS: FLAT, DS: FLAT, SS: FLAT
endif

INCLUDELIB LIBC
INCLUDELIB OLDNAMES

PUBLIC	_SerialStartFlush@4
PUBLIC	_SerialFlush@8
EXTRN	_SerialIRPPrologue@8:NEAR
EXTRN	_SerialIRPEpilogue@4:NEAR
EXTRN	__imp_@IofCompleteRequest@8:NEAR
EXTRN	_SerialStartOrQueue@20:NEAR
EXTRN	_SerialCompleteIfError@8:NEAR
; Function compile flags: /Ogsy
; File f:\w2ddk\src\kernel\serial\flush.c
;	COMDAT _SerialFlush@8
PAGESRP0	SEGMENT
_DeviceObject$ = 8
_Irp$ = 12
_SerialFlush@8 PROC NEAR				; COMDAT

; 68   : 
; 69   :     PSERIAL_DEVICE_EXTENSION Extension = DeviceObject->DeviceExtension;

  00000	8b 44 24 04	 mov	 eax, DWORD PTR _DeviceObject$[esp-4]
  00004	53		 push	 ebx
  00005	56		 push	 esi

; 70   :     NTSTATUS status;
; 71   :     PAGED_CODE();
; 72   : 
; 73   :     SerialDump(
; 74   :         SERIRPPATH,
; 75   :         ("SERIAL: Dispatch entry for: %x\n",Irp)
; 76   :         );
; 77   : 
; 78   :     SerialDump(SERTRACECALLS, ("SERIAL: Entering SerialFlush\n"));
; 79   : 
; 80   :     
; 81   : 
; 82   :     Irp->IoStatus.Information = 0L;

  00006	8b 74 24 10	 mov	 esi, DWORD PTR _Irp$[esp+4]
  0000a	57		 push	 edi
  0000b	8b 78 28	 mov	 edi, DWORD PTR [eax+40]
  0000e	83 66 1c 00	 and	 DWORD PTR [esi+28], 0

; 83   : 
; 84   :     if ((status = SerialIRPPrologue(Irp, Extension)) == STATUS_SUCCESS) {

  00012	57		 push	 edi
  00013	56		 push	 esi
  00014	e8 00 00 00 00	 call	 _SerialIRPPrologue@8
  00019	8b d8		 mov	 ebx, eax
  0001b	85 db		 test	 ebx, ebx
  0001d	75 31		 jne	 SHORT $L14782

; 85   : 
; 86   :        if (SerialCompleteIfError(DeviceObject, Irp) != STATUS_SUCCESS) {

  0001f	56		 push	 esi
  00020	ff 74 24 14	 push	 DWORD PTR _DeviceObject$[esp+12]
  00024	e8 00 00 00 00	 call	 _SerialCompleteIfError@8
  00029	85 c0		 test	 eax, eax
  0002b	74 07		 je	 SHORT $L14789

; 87   :           SerialDump(SERTRACECALLS, ("SERIAL: Leaving SerialFlush (1)\n"));
; 88   : 
; 89   :           return STATUS_CANCELLED;

  0002d	b8 20 01 00 c0	 mov	 eax, -1073741536	; c0000120H
  00032	eb 35		 jmp	 SHORT $L14792
$L14789:

; 90   : 
; 91   :        }
; 92   : 
; 93   :        SerialDump(SERTRACECALLS, ("SERIAL: Leaving SerialFlush (2)\n"));
; 94   : 
; 95   :        return SerialStartOrQueue(Extension, Irp, &Extension->WriteQueue,
; 96   :                &Extension->CurrentWriteIrp, SerialStartFlush);

  00034	8d 87 c8 00 00
	00		 lea	 eax, DWORD PTR [edi+200]
  0003a	68 00 00 00 00	 push	 OFFSET FLAT:_SerialStartFlush@4
  0003f	50		 push	 eax
  00040	8d 87 ac 00 00
	00		 lea	 eax, DWORD PTR [edi+172]
  00046	50		 push	 eax
  00047	56		 push	 esi
  00048	57		 push	 edi
  00049	e8 00 00 00 00	 call	 _SerialStartOrQueue@20
  0004e	eb 19		 jmp	 SHORT $L14792
$L14782:

; 97   : 
; 98   :     } else {
; 99   :        Irp->IoStatus.Status = status;
; 100  : 
; 101  :        if (!NT_SUCCESS(status)) {

  00050	85 db		 test	 ebx, ebx
  00052	89 5e 18	 mov	 DWORD PTR [esi+24], ebx
  00055	7d 10		 jge	 SHORT $L14795

; 102  :           SerialCompleteRequest(Extension, Irp, IO_NO_INCREMENT);

  00057	32 d2		 xor	 dl, dl
  00059	8b ce		 mov	 ecx, esi
  0005b	ff 15 00 00 00
	00		 call	 DWORD PTR __imp_@IofCompleteRequest@8
  00061	57		 push	 edi
  00062	e8 00 00 00 00	 call	 _SerialIRPEpilogue@4
$L14795:

; 103  :        }
; 104  : 
; 105  :        SerialDump(SERTRACECALLS, ("SERIAL: Leaving SerialFlush (3)\n"));
; 106  :        return status;

  00067	8b c3		 mov	 eax, ebx
$L14792:
  00069	5f		 pop	 edi
  0006a	5e		 pop	 esi
  0006b	5b		 pop	 ebx

; 107  :     }
; 108  : }

  0006c	c2 08 00	 ret	 8
_SerialFlush@8 ENDP
PAGESRP0	ENDS
EXTRN	_SerialStartWrite@4:NEAR
EXTRN	_SerialGetNextWrite@20:NEAR
; Function compile flags: /Ogsy
;	COMDAT _SerialStartFlush@4
PAGESRP0	SEGMENT
_Extension$ = 8
_NewIrp$ = 8
_SerialStartFlush@4 PROC NEAR				; COMDAT

; 136  : {

  00000	55		 push	 ebp
  00001	8b ec		 mov	 ebp, esp
  00003	56		 push	 esi

; 137  : 
; 138  :     PIRP NewIrp;
; 139  :     PAGED_CODE();
; 140  : 
; 141  :     Extension->CurrentWriteIrp->IoStatus.Status = STATUS_SUCCESS;

  00004	8b 75 08	 mov	 esi, DWORD PTR _Extension$[ebp]

; 142  : 
; 143  :     //
; 144  :     // The following call will actually complete the flush.
; 145  :     //
; 146  : 
; 147  :     SerialGetNextWrite(
; 148  :         &Extension->CurrentWriteIrp,
; 149  :         &Extension->WriteQueue,
; 150  :         &NewIrp,
; 151  :         TRUE,
; 152  :         Extension
; 153  :         );

  00007	56		 push	 esi
  00008	6a 01		 push	 1
  0000a	8d 86 c8 00 00
	00		 lea	 eax, DWORD PTR [esi+200]
  00010	8b 08		 mov	 ecx, DWORD PTR [eax]
  00012	83 61 18 00	 and	 DWORD PTR [ecx+24], 0
  00016	8d 4d 08	 lea	 ecx, DWORD PTR _NewIrp$[ebp]
  00019	51		 push	 ecx
  0001a	8d 8e ac 00 00
	00		 lea	 ecx, DWORD PTR [esi+172]
  00020	51		 push	 ecx
  00021	50		 push	 eax
  00022	e8 00 00 00 00	 call	 _SerialGetNextWrite@20

; 154  : 
; 155  :     if (NewIrp) {

  00027	83 7d 08 00	 cmp	 DWORD PTR _NewIrp$[ebp], 0
  0002b	74 06		 je	 SHORT $L14803

; 156  : 
; 157  :         ASSERT(NewIrp == Extension->CurrentWriteIrp);
; 158  :         SerialStartWrite(Extension);

  0002d	56		 push	 esi
  0002e	e8 00 00 00 00	 call	 _SerialStartWrite@4
$L14803:

; 159  : 
; 160  :     }
; 161  : 
; 162  :     return STATUS_SUCCESS;

  00033	33 c0		 xor	 eax, eax
  00035	5e		 pop	 esi

; 163  : 
; 164  : }

  00036	5d		 pop	 ebp
  00037	c2 04 00	 ret	 4
_SerialStartFlush@4 ENDP
PAGESRP0	ENDS
END

⌨️ 快捷键说明

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