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

📄 helper.cod

📁 windows CE 的BSP开发包.包含众多的驱动程序和OAL层的开发代码
💻 COD
📖 第 1 页 / 共 2 页
字号:
  00010	e1a05000	 mov         r5, r0

; 88   :     DWORD             dwValLen;
; 89   :     LONG               lStatus;
; 90   :     
; 91   :     dwValLen = (wcslen( szValue)+1)*sizeof(WCHAR);

  00014	e1a00006	 mov         r0, r6
  00018	eb000000	 bl          wcslen

; 92   :     lStatus = RegSetValueEx( hKey, szValueName, 0, REG_SZ, (PBYTE)szValue, dwValLen);
; 93   :         
; 94   :     if (lStatus != ERROR_SUCCESS) {          

  0001c	e2803001	 add         r3, r0, #1
  00020	e1a03083	 mov         r3, r3, lsl #1
  00024	e58d3004	 str         r3, [sp, #4]
  00028	e3a03001	 mov         r3, #1
  0002c	e3a02000	 mov         r2, #0
  00030	e1a01004	 mov         r1, r4
  00034	e1a00005	 mov         r0, r5
  00038	e58d6000	 str         r6, [sp]
  0003c	eb000000	 bl          RegSetValueExW
  00040	e3500000	 cmp         r0, #0

; 95   :         DEBUGMSG( ZONE_HELPER , (TEXT("ATAConfig: RegSetValueEx(%s) failed -returned %d  Error=%08X\r\n"), szValueName, lStatus, GetLastError()));
; 96   :         return FALSE;

  00044	13a00000	 movne       r0, #0

; 97   :     }
; 98   :     
; 99   :     DEBUGMSG( ZONE_HELPER, (TEXT("ATAPI: AtaSetRegistryString(%s) Value(%s) hKey: %x\r\n"), szValueName, szValue, hKey));
; 100  :     return TRUE;

  00048	03a00001	 moveq       r0, #1

; 101  : }

  0004c	e28dd008	 add         sp, sp, #8
  00050	e8bd4070	 ldmia       sp!, {r4 - r6, lr}
  00054	e12fff1e	 bx          lr
  00058		 |$M32088|

			 ENDP  ; |?AtaSetRegistryString@@YAHPAUHKEY__@@PAG1@Z|, AtaSetRegistryString

	EXPORT	|?ATAParseIdString@@YAHPAEHPAKPAPAE1@Z|	; ATAParseIdString
	IMPORT	|memcpy|
	IMPORT	|__C_specific_handler|
	IMPORT	|GetLastError|
	IMPORT	|SetLastError|

  00000			 AREA	 |.text| { |?ATAParseIdString@@YAHPAEHPAKPAPAE1@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.xdata$$?ATAParseIdString@@YAHPAEHPAKPAPAE1@Z|, DATA, SELECTION=5, ASSOC=|.text| { |?ATAParseIdString@@YAHPAEHPAKPAPAE1@Z| } ; comdat associative
|$T32128| DCD	0x1
	DCD	|$L32099|
	DCD	|$L32100|
	DCD	|$L32095|
	DCD	|$L32096|

  00000			 AREA	 |.text| { |?ATAParseIdString@@YAHPAEHPAKPAPAE1@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$?ATAParseIdString@@YAHPAEHPAKPAPAE1@Z|, PDATA, SELECTION=5, ASSOC=|.text| { |?ATAParseIdString@@YAHPAEHPAKPAPAE1@Z| } ; comdat associative
|$T32130| DCD	|$L32129|
	DCD	0xc0004d04

  00000			 AREA	 |.text| { |?ATAParseIdString@@YAHPAEHPAKPAPAE1@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$?ATAParseIdString@@YAHPAEHPAKPAPAE1@Z|, PDATA, SELECTION=5, ASSOC=|.text| { |?ATAParseIdString@@YAHPAEHPAKPAPAE1@Z| } ; comdat associative
|$T32132| DCD	|$L32095|
	DCD	0x40000200
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |?ATAParseIdString@@YAHPAEHPAKPAPAE1@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000	00000000	 DCD         |__C_specific_handler|
  00004	00000000	 DCD         |$T32128|

  00008		 |?ATAParseIdString@@YAHPAEHPAKPAPAE1@Z| PROC ; ATAParseIdString

; 105  : {

  00008		 |$L32129|
  00008	e1a0c00d	 mov         r12, sp
  0000c	e92d58f0	 stmdb       sp!, {r4 - r7, r11, r12, lr}
  00010	e28db01c	 add         r11, sp, #0x1C
  00014	e24dd008	 sub         sp, sp, #8
  00018		 |$L32126|
  00018	e1a05003	 mov         r5, r3
  0001c	e1a06000	 mov         r6, r0

; 106  :     BYTE *p;
; 107  :     DWORD cCopied;
; 108  :     BYTE *pDest;
; 109  :     
; 110  :     // check validity (spec says ASCII, I assumed printable)
; 111  :     for (p = str; p < &str[len]; ++p)

  00020	e0861001	 add         r1, r6, r1
  00024	e1560001	 cmp         r6, r1
  00028	e1a0e006	 mov         lr, r6
  0002c	2a000011	 bcs         |$L32124|
  00030		 |$L32000|

; 112  :         if (*p < 0x20 || *p > 0x7F) {

  00030	e5de0000	 ldrb        r0, [lr]
  00034	e3500020	 cmp         r0, #0x20
  00038	3a000005	 bcc         |$L32105|
  0003c	e350007f	 cmp         r0, #0x7F
  00040	8a000003	 bhi         |$L32105|
  00044	e28ee001	 add         lr, lr, #1
  00048	e15e0001	 cmp         lr, r1
  0004c	3afffff7	 bcc         |$L32000|
  00050	ea000008	 b           |$L32124|
  00054		 |$L32105|
  00054	e3a03000	 mov         r3, #0
  00058	e1a00003	 mov         r0, r3

; 124  :         *pdwOffset = 0;

  0005c	e5823000	 str         r3, [r2]

; 154  : }

  00060	e91b68f0	 ldmdb       r11, {r4 - r7, r11, sp, lr}
  00064	e12fff1e	 bx          lr
  00068		 |$L32005|

; 113  :             *pdwOffset = 0;
; 114  :             return FALSE;
; 115  :         }
; 116  : 
; 117  :     // find the last non-pad character
; 118  :     for (p = &str[len]; p > str && p[-1] == ' '; --p)

  00068	e5513001	 ldrb        r3, [r1, #-1]
  0006c	e3530020	 cmp         r3, #0x20
  00070	1a000002	 bne         |$L32112|
  00074	e2411001	 sub         r1, r1, #1
  00078		 |$L32124|
  00078	e1510006	 cmp         r1, r6
  0007c	8afffff9	 bhi         |$L32005|
  00080		 |$L32112|

; 119  :         ;
; 120  :     cCopied = p - str;

  00080	e0513006	 subs        r3, r1, r6

; 121  : 
; 122  :     // special case - empty string implies not present
; 123  :     if (cCopied == 0) {

  00084	03a00001	 moveq       r0, #1
  00088	03a03000	 moveq       r3, #0

; 124  :         *pdwOffset = 0;

  0008c	05823000	 streq       r3, [r2]

; 154  : }

  00090	091b68f0	 ldmeqdb     r11, {r4 - r7, r11, sp, lr}
  00094	012fff1e	 bxeq        lr

; 125  :         return TRUE;
; 126  :     }
; 127  :     ++cCopied; // this is a byte count so add a terminating null

  00098	e2834001	 add         r4, r3, #1

; 128  : 
; 129  :     // always increment *ppDest because it counts the bytes that we want,
; 130  :     // not just the bytes that we've actually written.
; 131  :     pDest = *ppDest;

  0009c	e5957000	 ldr         r7, [r5]
  000a0	e50b4024	 str         r4, [r11, #-0x24]

; 132  :     *ppDest += cCopied;

  000a4	e0873004	 add         r3, r7, r4
  000a8	e5853000	 str         r3, [r5]

; 133  : 
; 134  :     // if there has already been an error, then we needn't continue further
; 135  :     if (GetLastError() != ERROR_SUCCESS)

  000ac	eb000000	 bl          GetLastError
  000b0	e3500000	 cmp         r0, #0

; 136  :         return TRUE;

  000b4	13a00001	 movne       r0, #1

; 154  : }

  000b8	191b68f0	 ldmnedb     r11, {r4 - r7, r11, sp, lr}
  000bc	112fff1e	 bxne        lr

; 137  : 
; 138  :     // make sure there's enough space to copy into
; 139  :     if (cCopied > *pcBytesLeft) {

  000c0	e59b5000	 ldr         r5, [r11]
  000c4	e5953000	 ldr         r3, [r5]
  000c8	e1540003	 cmp         r4, r3
  000cc	9a000003	 bls         |$L32010|

; 140  :         SetLastError(ERROR_INSUFFICIENT_BUFFER);

  000d0	e3a0007a	 mov         r0, #0x7A
  000d4	eb000000	 bl          SetLastError

; 141  :         cCopied = *pcBytesLeft;

  000d8	e5954000	 ldr         r4, [r5]
  000dc	e50b4024	 str         r4, [r11, #-0x24]
  000e0		 |$L32010|
  000e0		 |$L32099|

; 142  :     }
; 143  :     __try {
; 144  :         if (cCopied) {

  000e0	e3540000	 cmp         r4, #0
  000e4	0a000006	 beq         |$L32100|

; 145  :             memcpy(pDest, str, cCopied-1);

  000e8	e2442001	 sub         r2, r4, #1
  000ec	e1a01006	 mov         r1, r6
  000f0	e1a00007	 mov         r0, r7
  000f4	eb000000	 bl          memcpy

; 146  :             pDest[cCopied-1] = '\0';

  000f8	e0873004	 add         r3, r7, r4
  000fc	e3a02000	 mov         r2, #0
  00100	e5432001	 strb        r2, [r3, #-1]
  00104		 |$L32100|

; 147  :         }
; 148  :     } __except (EXCEPTION_EXECUTE_HANDLER) {

  00104	ea000003	 b           |$L32101|
  00108		 |$L32096|

; 149  :         SetLastError(ERROR_INVALID_PARAMETER);

  00108	e3a00057	 mov         r0, #0x57
  0010c	eb000000	 bl          SetLastError

; 154  : }

  00110	e59b5000	 ldr         r5, [r11]
  00114	e51b4024	 ldr         r4, [r11, #-0x24]
  00118		 |$L32101|

; 150  :     };
; 151  : 
; 152  :     *pcBytesLeft -= cCopied;

  00118	e5953000	 ldr         r3, [r5]

; 153  :     return TRUE;

  0011c	e3a00001	 mov         r0, #1
  00120	e0433004	 sub         r3, r3, r4
  00124	e5853000	 str         r3, [r5]

; 154  : }

  00128	e91b68f0	 ldmdb       r11, {r4 - r7, r11, sp, lr}
  0012c	e12fff1e	 bx          lr

; 153  :     return TRUE;

  00130	e51b0020	 ldr         r0, [r11, #-0x20]

; 154  : }

  00134	e91b68f0	 ldmdb       r11, {r4 - r7, r11, sp, lr}
  00138	e12fff1e	 bx          lr

			 ENDP  ; |?ATAParseIdString@@YAHPAEHPAKPAPAE1@Z|, ATAParseIdString

  0013c		 |$L32098|
  0013c		 |$L32127|
  0013c		 |$L32095|

; 147  :         }
; 148  :     } __except (EXCEPTION_EXECUTE_HANDLER) {

  0013c	e3a00001	 mov         r0, #1
  00140		 |$L32097|
  00140	e1a0f00e	 mov         pc, lr
  00144		 |$L32131|
	END

⌨️ 快捷键说明

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