📄 smsndis.cod
字号:
002dc e38440bb orr r4, r4, #0xBB
; 481 : break;
002e0 eaffffb0 b |$L41941|
002e4 |$L41822|
; 454 : break;
; 455 : CASE_OID(OID_802_3_MAXIMUM_LIST_SIZE)
; 456 : tmpULong = MAX_MULTICAST_LIST_SIZE;
002e4 e3a0300c mov r3, #0xC
; 457 : pReturnBuff = (PVOID)&tmpULong;
; 458 : returnBuffLen = sizeof(tmpULong);
; 459 : break;
002e8 eaffff75 b |$L42343|
002ec |$L41825|
; 460 : CASE_OID(OID_802_3_MULTICAST_LIST)
; 461 : pReturnBuff = (PVOID)pSmsNdis->MulticastList;
; 462 : returnBuffLen = pSmsNdis->MulticastListCount * ETHERNET_ADDRESS_LEN;
002ec e5903054 ldr r3, [r0, #0x54]
002f0 e280600c add r6, r0, #0xC
002f4 e0833083 add r3, r3, r3, lsl #1
002f8 e1a05083 mov r5, r3, lsl #1
; 463 : break;
002fc ea000001 b |$L41741|
00300 |$L41819|
; 427 : CASE_OID(OID_GEN_XMIT_ERROR)
; 428 : tmpULong = 0;
; 429 : pReturnBuff = (PVOID)&tmpULong;
; 430 : returnBuffLen = sizeof(tmpULong);
; 431 : break;
; 432 : CASE_OID(OID_GEN_RCV_ERROR)
; 433 : tmpULong = 0;
; 434 : pReturnBuff = (PVOID)&tmpULong;
; 435 : returnBuffLen = sizeof(tmpULong);
; 436 : break;
; 437 : CASE_OID(OID_GEN_RCV_NO_BUFFER)
; 438 : tmpULong = 0;
; 439 : pReturnBuff = (PVOID)&tmpULong;
; 440 : returnBuffLen = sizeof(tmpULong);
; 441 : break;
; 442 : CASE_OID(OID_GEN_INIT_TIME_MS)
; 443 : tmpULong = 0;
; 444 : pReturnBuff = (PVOID)&tmpULong;
; 445 : returnBuffLen = sizeof(tmpULong);
; 446 : break;
; 447 : CASE_OID(OID_802_3_PERMANENT_ADDRESS)
; 448 : pReturnBuff = (PVOID)EmuEthernetAddr;
; 449 : returnBuffLen = sizeof(EmuEthernetAddr);
; 450 : break;
; 451 : CASE_OID(OID_802_3_CURRENT_ADDRESS)
; 452 : pReturnBuff = (PVOID)EmuEthernetAddr;
; 453 : returnBuffLen = sizeof(EmuEthernetAddr);
00300 e3a05006 mov r5, #6
00304 e28d6004 add r6, sp, #4
00308 |$L41741|
; 525 : }
; 526 :
; 527 : #undef CASE_OID
; 528 : #undef CASE_OID_NOT_SUPPORTED
; 529 :
; 530 : if (ndisStatus == NDIS_STATUS_SUCCESS)
; 531 : {
; 532 : if (returnBuffLen > InfoBufferLen)
00308 e1550008 cmp r5, r8
; 533 : {
; 534 : *pBytesNeeded = returnBuffLen;
0030c 85875000 strhi r5, [r7]
00310 8affffa4 bhi |$L41941|
; 535 : DBGMSG(ZONE_ERROR, (TEXT("SmsNdis: pInfoBuffer len too small. Len %d Need %d\r\n"),InfoBufferLen,returnBuffLen));
; 536 : }
; 537 : else
; 538 : {
; 539 : if (pReturnBuff)
00314 e3560000 cmp r6, #0
00318 0affffa1 beq |$L41940|
; 540 : {
; 541 : NdisMoveMemory(pInfoBuffer, pReturnBuff, returnBuffLen);
0031c e1a02005 mov r2, r5
00320 e1a01006 mov r1, r6
00324 e1a0000a mov r0, r10
00328 eb000000 bl memcpy
; 542 : *pBytesWritten = returnBuffLen;
; 543 : *pBytesNeeded = 0;
0032c e3a03000 mov r3, #0
00330 e5895000 str r5, [r9]
00334 e5873000 str r3, [r7]
; 544 : }
; 545 : else
00338 eaffff9a b |$L41941|
0033c |$L42355|
0033c fd010100 DCD 0xfd010100
00340 fc010201 DCD 0xfc010201
00344 01010104 DCD 0x1010104
00348 01010103 DCD 0x1010103
0034c 01010102 DCD 0x1010102
00350 01010101 DCD 0x1010101
00354 0002020a DCD 0x2020a
00358 00020209 DCD 0x20209
0035c 00020207 DCD 0x20207
00360 00020206 DCD 0x20206
00364 00020205 DCD 0x20205
00368 00020202 DCD 0x20202
0036c 00020201 DCD 0x20201
00370 00020105 DCD 0x20105
00374 c0010017 DCD 0xc0010017
00378 00020103 DCD 0x20103
0037c 00020102 DCD 0x20102
00380 00020101 DCD 0x20101
00384 00010202 DCD 0x10202
00388 00020203 DCD 0x20203
0038c 0002020b DCD 0x2020b
00390 00000000 DCD |??_C@_0BF@HDBOHGE@Siano?5NDIS?5Miniport?$AA?$AA@|
00394 00010101 DCD 0x10101
00398 00010201 DCD 0x10201
0039c 00000000 DCD |__security_cookie|
003a0 |$M42351|
ENDP ; |SmsNdis_QueryInformationHandler|
EXPORT |SmsNdis_SetInformationHandler|
IMPORT |memset|
00000 AREA |.text| { |SmsNdis_SetInformationHandler| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$SmsNdis_SetInformationHandler|, PDATA, SELECTION=5, ASSOC=|.text| { |SmsNdis_SetInformationHandler| } ; comdat associative
|$T42375| DCD |$L42374|
DCD 0x40005801
; Function compile flags: /Ogsy
00000 AREA |.text| { |SmsNdis_SetInformationHandler| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |SmsNdis_SetInformationHandler| PROC
; 576 : {
00000 |$L42374|
00000 e92d47f0 stmdb sp!, {r4 - r10, lr}
00004 |$M42372|
00004 e1a05003 mov r5, r3
00008 e1a0a002 mov r10, r2
0000c e1a07000 mov r7, r0
; 577 : NDIS_STATUS ndisStatus;
; 578 : PSMS_SMS_NDIS_ST pSmsNdis;
; 579 : UINT32 i;
; 580 : ULONG tmpULong;
; 581 :
; 582 : DBGMSG(ZONE_INFO, (TEXT("SmsNdis: +SmsNdis_SetInformationHandler\r\n")));
; 583 :
; 584 : pSmsNdis = (PSMS_SMS_NDIS_ST)MiniportAdapterContext;
; 585 : ndisStatus = NDIS_STATUS_SUCCESS;
; 586 : *pBytesRead = 0;
00010 e59d8020 ldr r8, [sp, #0x20]
; 587 : *pBytesNeeded = 0;
00014 e59d6024 ldr r6, [sp, #0x24]
; 588 :
; 589 : #define CASE_OID(Oid) \
; 590 : case Oid: \
; 591 : DBGMSG(ZONE_INFO, (TEXT("SmsNdis: Set 0x%08X ") TEXT(#Oid) TEXT("\r\n"),Oid));
; 592 :
; 593 : #define CASE_OID_NOT_SUPPORTED(Oid) \
; 594 : case Oid: \
; 595 : DBGMSG(ZONE_WARNING, (TEXT("SmsNdis: Set 0x%08X ") TEXT(#Oid) TEXT(" not supported\r\n"),Oid)); \
; 596 : ndisStatus = NDIS_STATUS_NOT_SUPPORTED;
; 597 :
; 598 : switch(Oid)
00018 e59fe13c ldr lr, [pc, #0x13C]
0001c e3a00000 mov r0, #0
00020 e5880000 str r0, [r8]
00024 e5860000 str r0, [r6]
00028 e3a04000 mov r4, #0
0002c e151000e cmp r1, lr
00030 0a00003a beq |$L41971|
00034 e59fe11c ldr lr, [pc, #0x11C]
00038 e151000e cmp r1, lr
0003c 0a00002e beq |$L41978|
00040 e59fe10c ldr lr, [pc, #0x10C]
00044 e151000e cmp r1, lr
00048 0a00000d beq |$L42004|
0004c e3a03801 mov r3, #1, 16
00050 e3833f46 orr r3, r3, #0x46, 30
00054 e1510003 cmp r1, r3
00058 0a000024 beq |$L41998|
0005c e59f30ec ldr r3, [pc, #0xEC]
00060 e1510003 cmp r1, r3
00064 0a000021 beq |$L41998|
00068 e59f30dc ldr r3, [pc, #0xDC]
0006c e1510003 cmp r1, r3
00070 0a000006 beq |$L41985|
00074 e59f30cc ldr r3, [pc, #0xCC]
00078 e1510003 cmp r1, r3
; 672 : default:
; 673 : DBGMSG(ZONE_WARNING, (TEXT("SmsNdis: Set Oid 0x%08X invalid or not supported\r\n"),Oid));
; 674 : ndisStatus = NDIS_STATUS_INVALID_OID;
0007c 159f40c0 ldrne r4, [pc, #0xC0]
00080 1a00002a bne |$L41968|
00084 |$L42004|
; 667 :
; 668 : CASE_OID_NOT_SUPPORTED(OID_GEN_PROTOCOL_OPTIONS)
; 669 : break;
; 670 : CASE_OID_NOT_SUPPORTED(OID_PNP_ADD_WAKE_UP_PATTERN)
00084 e3a04103 mov r4, #3, 2
00088 e38440bb orr r4, r4, #0xBB
; 671 : break;
0008c ea000027 b |$L41968|
00090 |$L41985|
; 629 : *pBytesNeeded = 0;
; 630 : break;
; 631 : CASE_OID(OID_802_3_MULTICAST_LIST)
; 632 :
; 633 : if (((InfoBufferLen % ETHERNET_ADDRESS_LEN) != 0) ||
; 634 : (InfoBufferLen > (ETHERNET_ADDRESS_LEN * MAX_MULTICAST_LIST_SIZE)))
00090 e59f30a8 ldr r3, [pc, #0xA8]
00094 e0832395 umull r2, r3, r5, r3
00098 e1a09123 mov r9, r3, lsr #2
0009c e0893089 add r3, r9, r9, lsl #1
000a0 e0553083 subs r3, r5, r3, lsl #1
000a4 1a00000d bne |$L41988|
000a8 e3550048 cmp r5, #0x48
000ac 8a00000b bhi |$L41988|
; 639 : }
; 640 :
; 641 : NdisZeroMemory(pSmsNdis->MulticastList,ETHERNET_ADDRESS_LEN * MAX_MULTICAST_LIST_SIZE);
000b0 e287000c add r0, r7, #0xC
000b4 e3a02048 mov r2, #0x48
000b8 e3a01000 mov r1, #0
000bc eb000000 bl memset
; 642 : if (InfoBufferLen > 0)
000c0 e3550000 cmp r5, #0
; 643 : {
; 644 : NdisMoveMemory(pSmsNdis->MulticastList,pInfoBuffer,InfoBufferLen);
000c4 11a02005 movne r2, r5
000c8 11a0100a movne r1, r10
000cc 1287000c addne r0, r7, #0xC
000d0 1b000000 blne memcpy
; 645 : }
; 646 : pSmsNdis->MulticastListCount = InfoBufferLen / ETHERNET_ADDRESS_LEN;
000d4 e5879054 str r9, [r7, #0x54]
; 647 :
; 648 : *pBytesRead = InfoBufferLen;
000d8 e5885000 str r5, [r8]
; 649 :
; 650 : DBGMSG(ZONE_INFO, (TEXT("SmsNdis: Multicast Address List :\r\n")));
; 651 : for (i = 0;i < pSmsNdis->MulticastListCount;i++)
; 652 : {
; 653 : DBGMSG(ZONE_INFO, (TEXT("SmsNdis: %02x:%02x:%02x:%02x:%02x:%02x\r\n"),
; 654 : pSmsNdis->MulticastList[i][0],pSmsNdis->MulticastList[i][1],
; 655 : pSmsNdis->MulticastList[i][2],pSmsNdis->MulticastList[i][3],
; 656 : pSmsNdis->MulticastList[i][4],pSmsNdis->MulticastList[i][5]));
; 657 : }
; 658 : break;
000dc ea000013 b |$L41968|
000e0 |$L41988|
; 635 : {
; 636 : *pBytesNeeded = ETHERNET_ADDRESS_LEN;
000e0 e3a03006 mov r3, #6
000e4 |$L42371|
; 637 : ndisStatus = NDIS_STATUS_INVALID_LENGTH;
000e4 e59f4050 ldr r4, [pc, #0x50]
000e8 e5863000 str r3, [r6]
; 638 : break;
000ec ea00000f b |$L41968|
000f0 |$L41998|
; 659 : CASE_OID(OID_GEN_NETWORK_LAYER_ADDRESSES)
; 660 : *pBytesRead = InfoBufferLen;
; 661 : *pBytesNeeded = 0;
; 662 : break;
; 663 : CASE_OID(OID_GEN_TRANSPORT_HEADER_OFFSET)
; 664 : *pBytesRead = InfoBufferLen;
000f0 e5885000 str r5, [r8]
; 665 : *pBytesNeeded = 0;
000f4 e5860000 str r0, [r6]
; 666 : break;
000f8 ea00000c b |$L41968|
000fc |$L41978|
; 617 : }
; 618 : DBGMSG(ZONE_INFO, (TEXT("SmsNdis: Set Current packet filter 0x%X\r\n"),tmpULong));
; 619 : break;
; 620 : CASE_OID(OID_GEN_CURRENT_LOOKAHEAD)
; 621 : if (InfoBufferLen != sizeof(ULONG))
000fc e3550004 cmp r5, #4
; 622 : {
; 623 : *pBytesNeeded = sizeof(ULONG);
00100 13a03004 movne r3, #4
00104 1afffff6 bne |$L42371|
; 624 : ndisStatus = NDIS_STATUS_INVALID_LENGTH;
; 625 : break;
; 626 : }
; 627 : pSmsNdis->CurrentLookahead = *((ULONG*)pInfoBuffer);
00108 e59a3000 ldr r3, [r10]
; 628 : *pBytesRead = InfoBufferLen;
0010c e3a02004 mov r2, #4
00110 e587305c str r3, [r7, #0x5C]
00114 e5882000 str r2, [r8]
; 665 : *pBytesNeeded = 0;
00118 e5860000 str r0, [r6]
; 666 : break;
0011c ea000003 b |$L41968|
00120 |$L41971|
; 599 : {
; 600 : CASE_OID(OID_GEN_CURRENT_PACKET_FILTER)
; 601 : if (InfoBufferLen != sizeof(ULONG))
00120 e3550004 cmp r5, #4
; 602 : {
; 603 : *pBytesNeeded = ETHERNET_ADDRESS_LEN;
; 604 : ndisStatus = NDIS_STATUS_INVALID_LENGTH;
; 605 : break;
00124 1affffed bne |$L41988|
; 606 : }
; 607 : tmpULong = *((ULONG*)pInfoBuffer);
; 608 : //if (tmpULong & SUPPORTED_PACKET_FILTER)
; 609 : //{
; 610 : // *pBytesRead = InfoBufferLen;
; 611 : // *pBytesNeeded = 0;
; 612 : // ndisStatus = NDIS_STATUS_NOT_SUPPORTED;
; 613 : //}
; 614 : //else
; 615 : {
; 616 : pSmsNdis->CurrentPacketFilter = tmpULong;
00128 e59a3000 ldr r3, [r10]
0012c e5873058 str r3, [r7, #0x58]
00130 |$L41968|
; 675 : break;
; 676 : }
; 677 :
; 678 : #undef CASE_OID
; 679 : #undef CASE_OID_NOT_SUPPORTED
; 680 :
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -