Windows NT 4.0 source code leak
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.

128 lines
2.2 KiB

4 years ago
  1. /*
  2. ** Noted.s
  3. **
  4. ** Copyright(C) 1994 Microsoft Corporation.
  5. ** All Rights Reserved.
  6. **
  7. ** HISTORY:
  8. ** Created: 01/27/94 - MarkRi
  9. **
  10. */
  11. #include "ksalpha.h"
  12. .data
  13. Module:
  14. .space 4
  15. ModName:
  16. .ascii "WINSRV\0"
  17. .text
  18. .set noreorder ;
  19. .extern LogData ;
  20. .extern GetModuleHandleA ;
  21. .extern GetProcAddress ;
  22. .globl LogNote ;
  23. .ent LogNote ;
  24. LogNote:
  25. lda sp, -80(sp) // space for 4 quadwords
  26. // On entry:
  27. // t0 is base of NOTE
  28. // t1 is API NAME
  29. // t2 is ADDRESS
  30. // save addresses & ra
  31. stq t0, 0(sp)
  32. stq t1, 8(sp)
  33. stq t2, 16(sp)
  34. stq ra, 24(sp)
  35. stq a0, 32(sp)
  36. stq a1, 40(sp)
  37. stq a2, 48(sp)
  38. stq a3, 56(sp)
  39. stq a4, 64(sp)
  40. stq a5, 72(sp)
  41. ldl t2, 0(t2) // Do we already have the API addr?
  42. bne t2, Found // Yes, go use it.
  43. ldl t3, Module // Do we have our module handle?
  44. bne t3, Search // Yes, go use it for search
  45. // Get module handle
  46. lda a0, ModName
  47. jsr GetModuleHandleA // Get our module handle
  48. stl v0, Module
  49. // restore base ptr
  50. ldq t1, 8(sp)
  51. Search:
  52. // Get address of API
  53. ldl a0, Module
  54. mov t1, a1
  55. jsr GetProcAddress
  56. ldq t2, 16(sp)
  57. stl v0, 0(t2) // v0 is the API address
  58. // restore base pointer & API Address
  59. ldq t0, 0(sp)
  60. Found:
  61. mov t0, a0
  62. jsr LogData
  63. // restore pointer & API Address
  64. ldq a0, 32(sp)
  65. ldq a1, 40(sp)
  66. ldq a2, 48(sp)
  67. ldq a3, 56(sp)
  68. ldq a4, 64(sp)
  69. ldq a5, 72(sp)
  70. ldq t2, 16(sp)
  71. ldl t1, 0(t2)
  72. ldq ra, 24(sp) // restore RA
  73. lda sp, 80(sp)
  74. jmp (t1) // do it
  75. // Will not return to us...
  76. .end LogNote
  77. #define ZJMP(argName) \
  78. .data ; \
  79. s##argName: ; \
  80. .ascii "NOTE:" #argName " \0" ; \
  81. n##argName: ;\
  82. .ascii #argName "\0" ; \
  83. .align 2 ;\
  84. a##argName: ; \
  85. .space 4 ; \
  86. .text ; \
  87. .globl z##argName ; \
  88. .ent z##argName ; \
  89. z##argName: ; \
  90. lda t0, s##argName ; \
  91. lda t1, n##argName ; \
  92. lda t2, a##argName ; \
  93. jmp LogNote ; \
  94. nop ; \
  95. .end z##argName ;
  96. ZJMP(ConServerDllInitialization)
  97. ZJMP(GdiServerDllInitialization)
  98. ZJMP(UserServerDllInitialization)
  99. ZJMP(_UserCheckWindowStationAccess)
  100. .set reorder