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

📄 test98.cod

📁 usb开发的资料!!USB标准
💻 COD
字号:
	TITLE	C:\98DDK\src\usb\TEST98\SYS\test98.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
_TLS	SEGMENT DWORD USE32 PUBLIC 'TLS'
_TLS	ENDS
;	COMDAT _DriverEntry@8
_TEXT	SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT	ENDS
;	COMDAT _Test98_DriverUnload@4
_TEXT	SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT	ENDS
;	COMDAT _Test98_DecIoCount@4
_TEXT	SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT	ENDS
;	COMDAT _Test98_IncIoCount@4
_TEXT	SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT	ENDS
FLAT	GROUP _DATA, CONST, _BSS
	ASSUME	CS: FLAT, DS: FLAT, SS: FLAT
endif
PUBLIC	_GUID_TEST_DEVICE
CONST	SEGMENT
_GUID_TEST_DEVICE DD 0ca56030H
	DW	0684aH
	DW	011d0H
	DB	0d6H
	DB	0f6H
	DB	00H
	DB	0c0H
	DB	04fH
	DB	0b1H
	DB	072H
	DB	08bH
CONST	ENDS
PUBLIC	_Test98_DriverUnload@4
PUBLIC	_DriverEntry@8
EXTRN	_Test98_PnP@8:NEAR
EXTRN	_Test98_Power@8:NEAR
EXTRN	_Test98_AddDevice@8:NEAR
EXTRN	_Test_ProcessIOCTL@8:NEAR
EXTRN	_Test_Create@8:NEAR
EXTRN	_Test_Read@8:NEAR
EXTRN	_Test_Write@8:NEAR
;	COMDAT _DriverEntry@8
_TEXT	SEGMENT
_DriverObject$ = 8
_DriverEntry@8 PROC NEAR				; COMDAT

; 57   : {

  00000	55		push	ebp
  00001	8b ec		mov	ebp, esp
  00003	83 ec 04	sub	esp, 4
  00006	53		push	ebx
  00007	56		push	esi
  00008	57		push	edi

; 58   :     PDEVICE_OBJECT  device;
; 59   : 
; 60   :     UNREFERENCED_PARAMETER (UniRegistryPath);
; 61   : 
; 62   :     DriverObject->MajorFunction [IRP_MJ_CREATE] =
; 63   :     DriverObject->MajorFunction [IRP_MJ_CLOSE]  = Test_Create;  

  00009	8b 45 08	mov	eax, DWORD PTR _DriverObject$[ebp]
  0000c	c7 40 40 00 00
	00 00		mov	DWORD PTR [eax+64], OFFSET FLAT:_Test_Create@8
  00013	8b 45 08	mov	eax, DWORD PTR _DriverObject$[ebp]
  00016	8b 40 40	mov	eax, DWORD PTR [eax+64]
  00019	8b 4d 08	mov	ecx, DWORD PTR _DriverObject$[ebp]
  0001c	89 41 38	mov	DWORD PTR [ecx+56], eax

; 64   :     
; 65   :     // routines to handle system PnP and power management reqeusts 
; 66   :     DriverObject->MajorFunction [IRP_MJ_PNP]    = Test98_PnP;

  0001f	8b 45 08	mov	eax, DWORD PTR _DriverObject$[ebp]
  00022	c7 80 a4 00 00
	00 00 00 00 00	mov	DWORD PTR [eax+164], OFFSET FLAT:_Test98_PnP@8

; 67   :     DriverObject->MajorFunction [IRP_MJ_POWER]  = Test98_Power;

  0002c	8b 45 08	mov	eax, DWORD PTR _DriverObject$[ebp]
  0002f	c7 80 90 00 00
	00 00 00 00 00	mov	DWORD PTR [eax+144], OFFSET FLAT:_Test98_Power@8

; 68   :     
; 69   :     // handles user mode DeviceIoControl() calls
; 70   :     DriverObject->MajorFunction [IRP_MJ_DEVICE_CONTROL] = Test_ProcessIOCTL;

  00039	8b 45 08	mov	eax, DWORD PTR _DriverObject$[ebp]
  0003c	c7 40 70 00 00
	00 00		mov	DWORD PTR [eax+112], OFFSET FLAT:_Test_ProcessIOCTL@8

; 71   :     
; 72   :     DriverObject->DriverUnload = Test98_DriverUnload;

  00043	8b 45 08	mov	eax, DWORD PTR _DriverObject$[ebp]
  00046	c7 40 34 00 00
	00 00		mov	DWORD PTR [eax+52], OFFSET FLAT:_Test98_DriverUnload@4

; 73   :     
; 74   :     // called when device plug-in to reat Funtional Device Object (FDO) 
; 75   :     DriverObject->DriverExtension->AddDevice = Test98_AddDevice;

  0004d	8b 45 08	mov	eax, DWORD PTR _DriverObject$[ebp]
  00050	8b 40 18	mov	eax, DWORD PTR [eax+24]
  00053	c7 40 04 00 00
	00 00		mov	DWORD PTR [eax+4], OFFSET FLAT:_Test98_AddDevice@8

; 76   :     
; 77   :     DriverObject->MajorFunction[IRP_MJ_WRITE] = Test_Write;

  0005a	8b 45 08	mov	eax, DWORD PTR _DriverObject$[ebp]
  0005d	c7 40 48 00 00
	00 00		mov	DWORD PTR [eax+72], OFFSET FLAT:_Test_Write@8

; 78   :     DriverObject->MajorFunction[IRP_MJ_READ] = Test_Read;

  00064	8b 45 08	mov	eax, DWORD PTR _DriverObject$[ebp]
  00067	c7 40 44 00 00
	00 00		mov	DWORD PTR [eax+68], OFFSET FLAT:_Test_Read@8

; 79   : 
; 80   :     return STATUS_SUCCESS;

  0006e	33 c0		xor	eax, eax
  00070	e9 00 00 00 00	jmp	$L2805
$L2805:

; 81   : }

  00075	5f		pop	edi
  00076	5e		pop	esi
  00077	5b		pop	ebx
  00078	c9		leave
  00079	c2 08 00	ret	8
_DriverEntry@8 ENDP
_TEXT	ENDS
;	COMDAT _Test98_DriverUnload@4
_TEXT	SEGMENT
_Test98_DriverUnload@4 PROC NEAR			; COMDAT

; 92   : {

  00000	55		push	ebp
  00001	8b ec		mov	ebp, esp
  00003	53		push	ebx
  00004	56		push	esi
  00005	57		push	edi

; 93   :     UNREFERENCED_PARAMETER (Driver);
; 94   :     PAGED_CODE();
; 95   : 
; 96   :     ASSERT (NULL == Driver->DeviceObject);
; 97   : 
; 98   :     //
; 99   :     // Here we free any resources allocated in DriverEntry
; 100  :     //
; 101  : 
; 102  :     return;

  00006	e9 00 00 00 00	jmp	$L2808
$L2808:

; 103  : }

  0000b	5f		pop	edi
  0000c	5e		pop	esi
  0000d	5b		pop	ebx
  0000e	c9		leave
  0000f	c2 04 00	ret	4
_Test98_DriverUnload@4 ENDP
_TEXT	ENDS
PUBLIC	_Test98_DecIoCount@4
EXTRN	__imp__KeSetEvent@12:NEAR
EXTRN	__imp_@InterlockedDecrement@4:NEAR
;	COMDAT _Test98_DecIoCount@4
_TEXT	SEGMENT
_Data$ = 8
_Test98_DecIoCount@4 PROC NEAR				; COMDAT

; 110  : {

  00000	55		push	ebp
  00001	8b ec		mov	ebp, esp
  00003	53		push	ebx
  00004	56		push	esi
  00005	57		push	edi

; 111  :     if (0 == InterlockedDecrement (&Data->OutstandingIO)) {

  00006	8b 4d 08	mov	ecx, DWORD PTR _Data$[ebp]
  00009	83 c1 40	add	ecx, 64			; 00000040H
  0000c	ff 15 00 00 00
	00		call	DWORD PTR __imp_@InterlockedDecrement@4
  00012	85 c0		test	eax, eax
  00014	0f 85 11 00 00
	00		jne	$L2811

; 112  :         KeSetEvent (&Data->RemoveEvent, 0, FALSE);

  0001a	6a 00		push	0
  0001c	6a 00		push	0
  0001e	8b 45 08	mov	eax, DWORD PTR _Data$[ebp]
  00021	83 c0 44	add	eax, 68			; 00000044H
  00024	50		push	eax
  00025	ff 15 00 00 00
	00		call	DWORD PTR __imp__KeSetEvent@12
$L2811:
$L2810:

; 113  :     }
; 114  : }

  0002b	5f		pop	edi
  0002c	5e		pop	esi
  0002d	5b		pop	ebx
  0002e	c9		leave
  0002f	c2 04 00	ret	4
_Test98_DecIoCount@4 ENDP
_TEXT	ENDS
PUBLIC	_Test98_IncIoCount@4
EXTRN	__imp_@InterlockedIncrement@4:NEAR
;	COMDAT _Test98_IncIoCount@4
_TEXT	SEGMENT
_Data$ = 8
_Test98_IncIoCount@4 PROC NEAR				; COMDAT

; 121  : {

  00000	55		push	ebp
  00001	8b ec		mov	ebp, esp
  00003	53		push	ebx
  00004	56		push	esi
  00005	57		push	edi

; 122  :     InterlockedIncrement (&Data->OutstandingIO);

  00006	8b 4d 08	mov	ecx, DWORD PTR _Data$[ebp]
  00009	83 c1 40	add	ecx, 64			; 00000040H
  0000c	ff 15 00 00 00
	00		call	DWORD PTR __imp_@InterlockedIncrement@4

; 123  :     if (Data->Removed) {

  00012	8b 45 08	mov	eax, DWORD PTR _Data$[ebp]
  00015	33 c9		xor	ecx, ecx
  00017	8a 48 1b	mov	cl, BYTE PTR [eax+27]
  0001a	85 c9		test	ecx, ecx
  0001c	0f 84 2f 00 00
	00		je	$L2814

; 124  : 
; 125  :         if (0 == InterlockedDecrement (&Data->OutstandingIO)) {

  00022	8b 4d 08	mov	ecx, DWORD PTR _Data$[ebp]
  00025	83 c1 40	add	ecx, 64			; 00000040H
  00028	ff 15 00 00 00
	00		call	DWORD PTR __imp_@InterlockedDecrement@4
  0002e	85 c0		test	eax, eax
  00030	0f 85 11 00 00
	00		jne	$L2815

; 126  :             KeSetEvent (&Data->RemoveEvent, 0, FALSE);

  00036	6a 00		push	0
  00038	6a 00		push	0
  0003a	8b 45 08	mov	eax, DWORD PTR _Data$[ebp]
  0003d	83 c0 44	add	eax, 68			; 00000044H
  00040	50		push	eax
  00041	ff 15 00 00 00
	00		call	DWORD PTR __imp__KeSetEvent@12
$L2815:

; 127  :         }
; 128  :         return STATUS_DELETE_PENDING;

  00047	b8 56 00 00 c0	mov	eax, -1073741738	; c0000056H
  0004c	e9 07 00 00 00	jmp	$L2813
$L2814:

; 129  :     }
; 130  :     return STATUS_SUCCESS;

  00051	33 c0		xor	eax, eax
  00053	e9 00 00 00 00	jmp	$L2813
$L2813:

; 131  : }

  00058	5f		pop	edi
  00059	5e		pop	esi
  0005a	5b		pop	ebx
  0005b	c9		leave
  0005c	c2 04 00	ret	4
_Test98_IncIoCount@4 ENDP
_TEXT	ENDS
END

⌨️ 快捷键说明

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