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

📄 pcidpprivate.cod

📁 一个amccs5933芯片的驱动程序开发源程序和部分文档
💻 COD
📖 第 1 页 / 共 3 页
字号:

; 377  : 
; 378  : 	return Status;

  00086	8a 45 ff	 mov	 al, BYTE PTR _Status$[ebp]
  00089	5f		 pop	 edi
  0008a	5e		 pop	 esi
  0008b	5b		 pop	 ebx

; 379  : }

  0008c	c9		 leave
  0008d	c2 10 00	 ret	 16			; 00000010H
_GetNextEntry@16 ENDP
_TEXT	ENDS
PUBLIC	_PutBackEntry@8
;	COMDAT _PutBackEntry@8
_TEXT	SEGMENT
_ObjExt$ = 8
_CurrentLink$ = 12
_PutBackEntry@8 PROC NEAR				; COMDAT

; 382  : BOOLEAN PutBackEntry(PPCIDP_EXTENSION ObjExt, PLINKED_LIST CurrentLink){

  00000	53		 push	 ebx
  00001	56		 push	 esi

; 383  : 
; 384  : 	BOOLEAN Status;
; 385  : 	KIRQL LListIrql;
; 386  : 
; 387  : 	KeAcquireSpinLock(&ObjExt->LListSpin, &LListIrql);

  00002	8b 74 24 0c	 mov	 esi, DWORD PTR _ObjExt$[esp+4]
  00006	57		 push	 edi
  00007	8d 7e 74	 lea	 edi, DWORD PTR [esi+116]
  0000a	8b cf		 mov	 ecx, edi
  0000c	ff 15 00 00 00
	00		 call	 DWORD PTR __imp_@KfAcquireSpinLock@4

; 388  : 	if(CurrentLink->Status == LL_CHECKEDOUT){ 

  00012	8b 4c 24 14	 mov	 ecx, DWORD PTR _CurrentLink$[esp+8]
  00016	80 79 08 04	 cmp	 BYTE PTR [ecx+8], 4
  0001a	75 0c		 jne	 SHORT $L8563

; 389  : 		CurrentLink->Status = LL_INSERTED;

  0001c	c6 41 08 02	 mov	 BYTE PTR [ecx+8], 2

; 390  : 		ObjExt->LLData.InsertedCount++;

  00020	66 ff 46 6a	 inc	 WORD PTR [esi+106]

; 391  : 		Status = TRUE;

  00024	b3 01		 mov	 bl, 1

; 392  : 	}
; 393  : 	else

  00026	eb 02		 jmp	 SHORT $L8564
$L8563:

; 394  : 		Status = FALSE;

  00028	32 db		 xor	 bl, bl
$L8564:

; 395  : 
; 396  : 	KeReleaseSpinLock(&ObjExt->LListSpin, LListIrql);

  0002a	8a d0		 mov	 dl, al
  0002c	8b cf		 mov	 ecx, edi
  0002e	ff 15 00 00 00
	00		 call	 DWORD PTR __imp_@KfReleaseSpinLock@8
  00034	5f		 pop	 edi

; 397  : 	//ObjExt->MemoryBase[0x1C57] = ObjExt->LLData.InsertedCount;//debug
; 398  : 	//ObjExt->MemoryBase[0x1C58]++;//debug
; 399  : 	return Status;

  00035	8a c3		 mov	 al, bl
  00037	5e		 pop	 esi
  00038	5b		 pop	 ebx

; 400  : }

  00039	c2 08 00	 ret	 8
_PutBackEntry@8 ENDP
_TEXT	ENDS
PUBLIC	_FreeEntry@8
;	COMDAT _FreeEntry@8
_TEXT	SEGMENT
_ObjExt$ = 8
_CurrentLink$ = 12
_FreeEntry@8 PROC NEAR					; COMDAT

; 403  : BOOLEAN FreeEntry(PPCIDP_EXTENSION ObjExt, PLINKED_LIST CurrentLink){

  00000	53		 push	 ebx
  00001	56		 push	 esi

; 404  : 
; 405  : 	BOOLEAN Status;
; 406  : 	KIRQL LListIrql;
; 407  : 
; 408  : 	KeAcquireSpinLock(&ObjExt->LListSpin, &LListIrql);

  00002	8b 74 24 0c	 mov	 esi, DWORD PTR _ObjExt$[esp+4]
  00006	57		 push	 edi
  00007	8d 7e 74	 lea	 edi, DWORD PTR [esi+116]
  0000a	8b cf		 mov	 ecx, edi
  0000c	ff 15 00 00 00
	00		 call	 DWORD PTR __imp_@KfAcquireSpinLock@4

; 409  : 	if(CurrentLink->Status == LL_CHECKEDOUT || CurrentLink->Status == LL_ACQUIRED){

  00012	8b 4c 24 14	 mov	 ecx, DWORD PTR _CurrentLink$[esp+8]
  00016	8a 59 08	 mov	 bl, BYTE PTR [ecx+8]
  00019	80 fb 04	 cmp	 bl, 4
  0001c	74 09		 je	 SHORT $L8573
  0001e	80 fb 01	 cmp	 bl, 1
  00021	74 04		 je	 SHORT $L8573

; 413  : 	}
; 414  : 	else
; 415  : 		Status = FALSE;

  00023	32 db		 xor	 bl, bl
  00025	eb 0c		 jmp	 SHORT $L8574
$L8573:

; 410  : 		CurrentLink->Status = LL_AVAILABLE;

  00027	c6 41 08 03	 mov	 BYTE PTR [ecx+8], 3

; 411  : 		ObjExt->LLData.CurrentLink = CurrentLink->Prev;

  0002b	8b 49 04	 mov	 ecx, DWORD PTR [ecx+4]
  0002e	89 4e 70	 mov	 DWORD PTR [esi+112], ecx

; 412  : 		Status = TRUE;

  00031	b3 01		 mov	 bl, 1
$L8574:

; 416  : 
; 417  : 	KeReleaseSpinLock(&ObjExt->LListSpin, LListIrql);

  00033	8a d0		 mov	 dl, al
  00035	8b cf		 mov	 ecx, edi
  00037	ff 15 00 00 00
	00		 call	 DWORD PTR __imp_@KfReleaseSpinLock@8
  0003d	5f		 pop	 edi

; 418  : 	//ObjExt->MemoryBase[0x1C59]++;//debug
; 419  : 
; 420  : 	return Status;

  0003e	8a c3		 mov	 al, bl
  00040	5e		 pop	 esi
  00041	5b		 pop	 ebx

; 421  : }

  00042	c2 08 00	 ret	 8
_FreeEntry@8 ENDP
_TEXT	ENDS
PUBLIC	_GetFreeEntry@4
EXTRN	__imp__ExAllocatePoolWithTag@12:NEAR
;	COMDAT _GetFreeEntry@4
_TEXT	SEGMENT
_ObjExt$ = 8
_GetFreeEntry@4 PROC NEAR				; COMDAT

; 424  : PLINKED_LIST GetFreeEntry(PPCIDP_EXTENSION ObjExt){

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

; 425  : 
; 426  : 	PLINKED_LIST FirstLink;
; 427  : 	PLINKED_LIST ReturnLink = NULL;
; 428  : 	KIRQL LListIrql;
; 429  : 
; 430  : 	KeAcquireSpinLock(&ObjExt->LListSpin, &LListIrql);

  00005	8b 75 08	 mov	 esi, DWORD PTR _ObjExt$[ebp]
  00008	57		 push	 edi
  00009	33 db		 xor	 ebx, ebx
  0000b	8d 4e 74	 lea	 ecx, DWORD PTR [esi+116]
  0000e	89 4d 08	 mov	 DWORD PTR 8+[ebp], ecx
  00011	ff 15 00 00 00
	00		 call	 DWORD PTR __imp_@KfAcquireSpinLock@4

; 431  : 	if(ObjExt->LLData.IsEmpty == FALSE) {

  00017	38 5e 68	 cmp	 BYTE PTR [esi+104], bl
  0001a	75 1d		 jne	 SHORT $L8585

; 432  : 		FirstLink = ObjExt->LLData.CurrentLink;

  0001c	8b 7e 70	 mov	 edi, DWORD PTR [esi+112]

; 433  : 		do{
; 434  : 			ObjExt->LLData.CurrentLink = ObjExt->LLData.CurrentLink->Next;

  0001f	8b 0f		 mov	 ecx, DWORD PTR [edi]
$L8700:
  00021	89 4e 70	 mov	 DWORD PTR [esi+112], ecx

; 435  : 			if(ObjExt->LLData.CurrentLink->Status == LL_AVAILABLE){

  00024	80 79 08 03	 cmp	 BYTE PTR [ecx+8], 3
  00028	74 08		 je	 SHORT $L8697

; 438  : 
; 439  : 				//ObjExt->MemoryBase[0x1C65]++;	//debug
; 440  : 
; 441  : 				break;
; 442  : 			}
; 443  : 		} while(FirstLink != ObjExt->LLData.CurrentLink);

  0002a	3b f9		 cmp	 edi, ecx
  0002c	74 0b		 je	 SHORT $L8585

; 433  : 		do{
; 434  : 			ObjExt->LLData.CurrentLink = ObjExt->LLData.CurrentLink->Next;

  0002e	8b 09		 mov	 ecx, DWORD PTR [ecx]

; 435  : 			if(ObjExt->LLData.CurrentLink->Status == LL_AVAILABLE){

  00030	eb ef		 jmp	 SHORT $L8700
$L8697:

; 436  : 				ObjExt->LLData.CurrentLink->Status = LL_ACQUIRED;

  00032	c6 41 08 01	 mov	 BYTE PTR [ecx+8], 1

; 437  : 				ReturnLink = ObjExt->LLData.CurrentLink;

  00036	8b 5e 70	 mov	 ebx, DWORD PTR [esi+112]
$L8585:

; 444  : 	}
; 445  : 	KeReleaseSpinLock(&ObjExt->LListSpin, LListIrql);

  00039	8b 4d 08	 mov	 ecx, DWORD PTR 8+[ebp]
  0003c	8a d0		 mov	 dl, al
  0003e	ff 15 00 00 00
	00		 call	 DWORD PTR __imp_@KfReleaseSpinLock@8

; 446  : 
; 447  : 	if(ReturnLink == NULL){

  00044	85 db		 test	 ebx, ebx
  00046	75 18		 jne	 SHORT $L8591

; 448  : 		ReturnLink = ExAllocatePool(NonPagedPool, sizeof(LINKED_LIST));

  00048	68 44 64 6b 20	 push	 543908932		; 206b6444H
  0004d	6a 14		 push	 20			; 00000014H
  0004f	53		 push	 ebx
  00050	ff 15 00 00 00
	00		 call	 DWORD PTR __imp__ExAllocatePoolWithTag@12
  00056	8b d8		 mov	 ebx, eax

; 449  : 		if(ReturnLink != NULL){

  00058	85 db		 test	 ebx, ebx
  0005a	74 04		 je	 SHORT $L8591

; 450  : 			ReturnLink->Status = LL_NEW;

  0005c	80 63 08 00	 and	 BYTE PTR [ebx+8], 0
$L8591:
  00060	5f		 pop	 edi

; 451  : 
; 452  : 			//ObjExt->MemoryBase[0x1C64]++;	//debug
; 453  : 
; 454  : 		}
; 455  : 	}
; 456  : 
; 457  : 	return ReturnLink;

  00061	8b c3		 mov	 eax, ebx
  00063	5e		 pop	 esi
  00064	5b		 pop	 ebx

; 458  : }

  00065	5d		 pop	 ebp
  00066	c2 04 00	 ret	 4
_GetFreeEntry@4 ENDP
_TEXT	ENDS
PUBLIC	_InsertEntry@8
;	COMDAT _InsertEntry@8
_TEXT	SEGMENT
_ObjExt$ = 8
_Entry$ = 12
_InsertEntry@8 PROC NEAR				; COMDAT

; 461  : BOOLEAN InsertEntry(PPCIDP_EXTENSION ObjExt, PLINKED_LIST Entry){

  00000	53		 push	 ebx
  00001	56		 push	 esi

; 462  : 
; 463  : 	BOOLEAN Status = TRUE;
; 464  : 	PLINKED_LIST CurrentLink;
; 465  : 	KIRQL LListIrql;
; 466  : 
; 467  : 	KeAcquireSpinLock(&ObjExt->LListSpin, &LListIrql);

  00002	8b 74 24 0c	 mov	 esi, DWORD PTR _ObjExt$[esp+4]
  00006	57		 push	 edi
  00007	b3 01		 mov	 bl, 1
  00009	8d 7e 74	 lea	 edi, DWORD PTR [esi+116]
  0000c	8b cf		 mov	 ecx, edi
  0000e	ff 15 00 00 00
	00		 call	 DWORD PTR __imp_@KfAcquireSpinLock@4

; 468  : 	if(Entry->Status == LL_NEW){

  00014	8b 4c 24 14	 mov	 ecx, DWORD PTR _Entry$[esp+8]
  00018	8a d0		 mov	 dl, al
  0001a	8a 41 08	 mov	 al, BYTE PTR [ecx+8]
  0001d	84 c0		 test	 al, al
  0001f	75 31		 jne	 SHORT $L8600

; 469  : 		Entry->Status = LL_INSERTED;

  00021	c6 41 08 02	 mov	 BYTE PTR [ecx+8], 2

; 470  : 		ObjExt->LLData.FreeMax++;

  00025	66 ff 46 6c	 inc	 WORD PTR [esi+108]

; 471  : 		ObjExt->LLData.InsertedCount++;

  00029	66 ff 46 6a	 inc	 WORD PTR [esi+106]

; 472  : 		if(ObjExt->LLData.IsEmpty == TRUE) {

  0002d	38 5e 68	 cmp	 BYTE PTR [esi+104], bl
  00030	75 0d		 jne	 SHORT $L8601

; 473  : 			Entry->Prev = Entry;

  00032	89 49 04	 mov	 DWORD PTR [ecx+4], ecx

; 474  : 			Entry->Next = Entry;

  00035	89 09		 mov	 DWORD PTR [ecx], ecx

; 475  : 			ObjExt->LLData.CurrentLink = Entry;
; 476  : 			ObjExt->LLData.IsEmpty = FALSE;

  00037	20 46 68	 and	 BYTE PTR [esi+104], al
  0003a	89 4e 70	 mov	 DWORD PTR [esi+112], ecx

; 477  : 
; 478  : 			//ObjExt->MemoryBase[0x1C66]++;	//debug
; 479  : 		}
; 480  : 		else {

  0003d	eb 23		 jmp	 SHORT $L8605
$L8601:

; 481  : 			CurrentLink = ObjExt->LLData.CurrentLink;

  0003f	8b 76 70	 mov	 esi, DWORD PTR [esi+112]

; 482  : 			Entry->Prev = CurrentLink;

  00042	89 71 04	 mov	 DWORD PTR [ecx+4], esi

; 483  : 			Entry->Next = CurrentLink->Next;

  00045	8b 06		 mov	 eax, DWORD PTR [esi]
  00047	89 01		 mov	 DWORD PTR [ecx], eax

; 484  : 
; 485  : 			CurrentLink->Next->Prev = Entry;

  00049	8b 06		 mov	 eax, DWORD PTR [esi]
  0004b	89 48 04	 mov	 DWORD PTR [eax+4], ecx

; 486  : 			CurrentLink->Next = Entry;

  0004e	89 0e		 mov	 DWORD PTR [esi], ecx

; 487  : 
; 488  : 			//ObjExt->MemoryBase[0x1C67]++;	//debug
; 489  : 		}
; 490  : 	}
; 491  : 	else if(Entry->Status == LL_ACQUIRED){

  00050	eb 10		 jmp	 SHORT $L8605
$L8600:
  00052	3c 01		 cmp	 al, 1
  00054	75 0a		 jne	 SHORT $L8604

; 492  : 		Entry->Status = LL_INSERTED;

  00056	c6 41 08 02	 mov	 BYTE PTR [ecx+8], 2

; 493  : 		ObjExt->LLData.InsertedCount++;

  0005a	66 ff 46 6a	 inc	 WORD PTR [esi+106]

; 494  : 
; 495  : 		//ObjExt->MemoryBase[0x1C68]++;	//debug
; 496  : 	}
; 497  : 	else

  0005e	eb 02		 jmp	 SHORT $L8605
$L8604:

; 498  : 		Status = FALSE;

  00060	32 db		 xor	 bl, bl
$L8605:

; 499  : 
; 500  : 	KeReleaseSpinLock(&ObjExt->LListSpin, LListIrql);

  00062	8b cf		 mov	 ecx, edi
  00064	ff 15 00 00 00
	00		 call	 DWORD PTR __imp_@KfReleaseSpinLock@8
  0006a	5f		 pop	 edi

; 501  : 	//ObjExt->MemoryBase[0x1C5A] = ObjExt->LLData.FreeMax;//debug
; 502  : 	//ObjExt->MemoryBase[0x1C57] = ObjExt->LLData.InsertedCount;//debug
; 503  : 
; 504  : 	return Status;

  0006b	8a c3		 mov	 al, bl
  0006d	5e		 pop	 esi
  0006e	5b		 pop	 ebx

; 505  : }

  0006f	c2 08 00	 ret	 8
_InsertEntry@8 ENDP
_TEXT	ENDS
EXTRN	__imp__ExFreePool@4:NEAR
;	COMDAT _DeleteAllEntries@4
_TEXT	SEGMENT
_ObjExt$ = 8
_DeleteAllEntries@4 PROC NEAR				; COMDAT

; 508  : BOOLEAN DeleteAllEntries(PPCIDP_EXTENSION ObjExt){

  00000	56		 push	 esi

; 509  : 
; 510  : 	PLINKED_LIST CurrentLink = ObjExt->LLData.CurrentLink;

  00001	8b 74 24 08	 mov	 esi, DWORD PTR _ObjExt$[esp]
  00005	57		 push	 edi
  00006	8b 7e 70	 mov	 edi, DWORD PTR [esi+112]
$L8709:

; 511  : 
; 512  : 	while(ObjExt->LLData.IsEmpty == FALSE) {

  00009	80 7e 68 00	 cmp	 BYTE PTR [esi+104], 0
  0000d	75 35		 jne	 SHORT $L8612

; 513  : 
; 514  : 		if(CurrentLink->Status == LL_INSERTED)

  0000f	80 7f 08 02	 cmp	 BYTE PTR [edi+8], 2
  00013	75 04		 jne	 SHORT $L8613

; 515  : 			ObjExt->LLData.InsertedCount--;

  00015	66 ff 4e 6a	 dec	 WORD PTR [esi+106]
$L8613:

; 516  : 
; 517  : 		if(CurrentLink->Next == CurrentLink) {

  00019	8b 07		 mov	 eax, DWORD PTR [edi]
  0001b	3b c7		 cmp	 eax, edi
  0001d	75 06		 jne	 SHORT $L8614

; 518  : 			ObjExt->LLData.IsEmpty = TRUE;

  0001f	c6 46 68 01	 mov	 BYTE PTR [esi+104], 1

; 519  : 		}
; 520  : 		else {

  00023	eb 10		 jmp	 SHORT $L8615
$L8614:

; 521  : 			CurrentLink->Prev->Next = CurrentLink->Next;

  00025	8b 4f 04	 mov	 ecx, DWORD PTR [edi+4]
  00028	89 01		 mov	 DWORD PTR [ecx], eax

; 522  : 			CurrentLink->Next->Prev = CurrentLink->Prev;

  0002a	8b 07		 mov	 eax, DWORD PTR [edi]
  0002c	8b 4f 04	 mov	 ecx, DWORD PTR [edi+4]
  0002f	89 48 04	 mov	 DWORD PTR [eax+4], ecx

; 523  : 			CurrentLink = CurrentLink->Prev;

  00032	8b 7f 04	 mov	 edi, DWORD PTR [edi+4]
$L8615:

; 524  : 		}
; 525  : 		ObjExt->LLData.FreeMax--;
; 526  : 		//ObjExt->MemoryBase[0x1C5A] = ObjExt->LLData.FreeMax;//debug
; 527  : 		//ObjExt->MemoryBase[0x1C57] = ObjExt->LLData.InsertedCount;//debug
; 528  : 
; 529  : 		ExFreePool(ObjExt->LLData.CurrentLink);

  00035	ff 76 70	 push	 DWORD PTR [esi+112]
  00038	66 ff 4e 6c	 dec	 WORD PTR [esi+108]
  0003c	ff 15 00 00 00
	00		 call	 DWORD PTR __imp__ExFreePool@4
  00042	eb c5		 jmp	 SHORT $L8709
$L8612:

; 530  : 	}
; 531  : 
; 532  : 	return(!ObjExt->LLData.IsEmpty);

  00044	33 c0		 xor	 eax, eax
  00046	5f		 pop	 edi
  00047	38 46 68	 cmp	 BYTE PTR [esi+104], al
  0004a	5e		 pop	 esi
  0004b	0f 94 c0	 sete	 al

; 533  : }

  0004e	c2 04 00	 ret	 4
_DeleteAllEntries@4 ENDP
_TEXT	ENDS
END

⌨️ 快捷键说明

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