Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

98 lines
2.9 KiB

  1. body_IMM32CONFIGURE macro
  2. ; ebx+42 param1
  3. ; ebx+38 param2
  4. ; ebx+36 param3
  5. ; ebx+32 param4
  6. ; ebx+28 param5
  7. ; ebx+24 param6
  8. ; ebx+22 param7
  9. ;-------------------------------------
  10. ; temp storage
  11. SavelpData equ <[ebp+4]>
  12. SavelpRead equ <[ebp+8]>
  13. SavelpWord equ <[ebp+12]>
  14. lpRead equ <[ebp+16]>
  15. lpWord equ <[ebp+20]>
  16. sub esp, 8 ; lpRead & lpWord
  17. xor eax,eax ; storage for unmap
  18. push eax ; SavelpWord
  19. push eax ; SavelpRead
  20. push eax ; SavelpData
  21. push ebp
  22. mov ebp,esp
  23. push edi
  24. mov edi, [ebx+32]
  25. cmp edi, 2 ; see if it's IME_CONFIG_REGISTERWORD
  26. jnz Skip_Data ; don't map it if not.
  27. ; create new call frame and make the call
  28. ; param5 from: LPREGISTERWORD
  29. mov edi, [ebx+28] ; base address
  30. mov eax, edi
  31. test eax, eax
  32. jz Skip_Data ; don't map if not given
  33. mov dword ptr SavelpData, edi
  34. push edi
  35. call MapSLFix
  36. mov edi, eax
  37. mov eax, [edi] ; eax = lpReading (16:16)
  38. mov dword ptr SavelpRead, eax ;
  39. test eax, eax
  40. jz Skip_Read
  41. push eax
  42. call MapSLFix
  43. Skip_Read:
  44. mov dword ptr lpRead,eax ; eax = lpReading (32)
  45. mov eax, [edi+4] ; eax = lpWord (16:16)
  46. mov dword ptr SavelpWord, eax
  47. test eax, eax
  48. jz Skip_Word
  49. push eax
  50. call MapSLFix
  51. Skip_Word:
  52. mov dword ptr lpWord,eax
  53. lea eax,lpRead
  54. Skip_Data: ; Here we ger param5 in eax.
  55. ; param7 from: unsigned short
  56. movzx edi,word ptr [ebx+22]
  57. push edi ; to: unsigned long
  58. ; param6 from: unsigned long
  59. push dword ptr [ebx+24] ; to unsigned long
  60. ; param5 from: unsigned long
  61. push eax
  62. ; param4 from: unsigned long
  63. push dword ptr [ebx+32] ; to unsigned long
  64. ; param3 from: unsigned short
  65. movzx eax,word ptr [ebx+36]
  66. push eax ; to: unsigned long
  67. ; param2 from: unsigned long
  68. push dword ptr [ebx+38] ; to unsigned long
  69. ; param1 from: unsigned long
  70. push dword ptr [ebx+42] ; to unsigned long
  71. call K32Thk1632Prolog@0
  72. call Imm32Configure@28 ; call 32-bit version
  73. call K32Thk1632Epilog@0
  74. ; return code long --> short
  75. ; no conversion needed
  76. lea eax,SavelpData
  77. push eax
  78. push dword ptr 3
  79. call UnMapSLFixArray ;! Preserves eax & edx
  80. pop edi
  81. pop ebp
  82. ;-------------------------------------
  83. exit:
  84. endm