mirror of https://github.com/lianthony/NT4.0
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.
186 lines
7.0 KiB
186 lines
7.0 KiB
/*
|
|
** tagdi32.s
|
|
**
|
|
** Copyright(C) 1994 Microsoft Corporation.
|
|
** All Rights Reserved.
|
|
**
|
|
** HISTORY:
|
|
** Created: 01/27/94 - MarkRi
|
|
** Changed: 09/08/94 - JHSimon @ IBM for PPC
|
|
**
|
|
*/
|
|
|
|
|
|
// On Entry:
|
|
// r0 -> Note string
|
|
// r11 -> API Name
|
|
// r12 -> API Address
|
|
|
|
// ----
|
|
|
|
.pdata
|
|
.align 2
|
|
.ualong ..LogNote,LogNote.e,0,0,LogNote.b
|
|
.reldata
|
|
.globl LogNote
|
|
LogNote:
|
|
.ualong ..LogNote,.toc
|
|
.section .text
|
|
.align 2
|
|
.globl ..LogNote
|
|
..LogNote:
|
|
|
|
// start of prologue
|
|
// r0, r11, r12 are used to pass parameters into ..LogNote
|
|
|
|
stw r3, -4 (sp) // param
|
|
stw r4, -8 (sp) // param
|
|
stw r5, -12(sp) // param
|
|
stw r6, -16(sp) // param
|
|
stw r7, -20(sp) // param
|
|
stw r8, -44(sp) // param
|
|
stw r9, -28(sp) // param
|
|
stw r10,-32(sp) // param
|
|
stw r28,-36(sp) // scratch
|
|
stw r29,-40(sp) // t0
|
|
stw r30,-44(sp) // t1
|
|
stw r31,-48(sp) // t2
|
|
stw r2, -92(sp) // TOC
|
|
mflr r28
|
|
stw r28,-52(sp)
|
|
stwu sp,-96(sp)
|
|
|
|
// end of prologue
|
|
|
|
LogNote.b:
|
|
|
|
// save temporary registers
|
|
mr r29,r0
|
|
mr r30,r11
|
|
mr r31,r12
|
|
|
|
// Api cached?
|
|
lwz r3,0(r31)
|
|
cmpi 0x0,0x0,r3,0x0
|
|
bne Found
|
|
|
|
// Module Handle existing?
|
|
lwz r28, [toc]Module(rtoc)
|
|
lwz r3, 0(r28)
|
|
cmpi 0x0,0x0,r3,0x0
|
|
bne Search
|
|
|
|
// Get Module Handle, since it is yet cached
|
|
lwz r28, [toc]ModName(rtoc)
|
|
mr r3, r28
|
|
bl ..GetModuleHandleA
|
|
.znop ..GetModuleHandleA
|
|
lwz r28, [toc]Module(rtoc)
|
|
stw r3, 0(r28)
|
|
Search:
|
|
mr r4, r30
|
|
bl ..GetProcAddress
|
|
.znop ..GetProcAddress
|
|
stw r3, 0(r31)
|
|
Found:
|
|
mr r3, r29
|
|
bl ..LogData
|
|
.znop ..LogData
|
|
|
|
lwz r3, 92(sp) // param
|
|
lwz r4, 88(sp) // param
|
|
lwz r5, 84(sp) // param
|
|
lwz r6, 80(sp) // param
|
|
lwz r7, 76(sp) // param
|
|
lwz r8, 72(sp) // param
|
|
lwz r9, 68(sp) // param
|
|
lwz r10,64(sp) // param
|
|
lwz r28,60(sp) // NV scratch
|
|
lwz r29,56(sp) // t0
|
|
lwz r30,52(sp) // t1
|
|
lwz r31,48(sp) // t2
|
|
lwz r11,44(sp) // lr
|
|
mtlr r11
|
|
|
|
lwz r0, 0(r31)
|
|
mtctr r0
|
|
addi sp,sp,96
|
|
bctr
|
|
LogNote.e:
|
|
.data
|
|
.align 2
|
|
Module:
|
|
.space 4
|
|
|
|
ModName:
|
|
.string "WINSRV"
|
|
|
|
// NOTE, API NAME, ADDRESS structure
|
|
// are these ever used???
|
|
|
|
NoteStr:
|
|
.space 4
|
|
ApiName:
|
|
.space 4
|
|
ApiAddr:
|
|
.space 4
|
|
|
|
|
|
|
|
#define ZJMP(argName) \
|
|
.pdata ;\
|
|
.align 2 ;\
|
|
.ualong ..z##argName,z##argName.e,0,0,z##argName.b;\
|
|
.reldata ;\
|
|
.globl z##argName ;\
|
|
z##argName: ;\
|
|
.ualong ..z##argName,.toc ;\
|
|
.section .text ;\
|
|
.align 2 ;\
|
|
.globl ..z##argName ;\
|
|
..z##argName: ;\
|
|
z##argName.b: ;\
|
|
lwz r0 ,[toc]s##argName(rtoc) ;\
|
|
lwz r11 ,[toc]n##argName(rtoc) ;\
|
|
lwz r12 ,[toc]a##argName(rtoc) ;\
|
|
b ..LogNote ;\
|
|
nop ;\
|
|
z##argName.e: ;\
|
|
.data ;\
|
|
.align 3 ;\
|
|
s##argName: ;\
|
|
.byte 78 ;\
|
|
.byte 79 ;\
|
|
.byte 84 ;\
|
|
.byte 69 ;\
|
|
.byte 58 ;\
|
|
.byte 32 ;\
|
|
.byte 32 ;\
|
|
.byte 32 ;\
|
|
.string #argName ;\
|
|
n##argName: ;\
|
|
.string #argName ;\
|
|
a##argName: ;\
|
|
.space 4
|
|
|
|
|
|
|
|
|
|
|
|
ZJMP(ConServerDllInitialization)
|
|
ZJMP(GdiServerDllInitialization)
|
|
ZJMP(UserServerDllInitialization)
|
|
ZJMP(_UserCheckWindowStationAccess)
|
|
|
|
|
|
|
|
// External Functions
|
|
.data
|
|
.align 3
|
|
|
|
.extern ..LogData
|
|
.extern LogData
|
|
.extern ..GetModuleHandleA
|
|
.extern GetModuleHandleA
|
|
.extern ..GetProcAddress
|
|
.extern GetProcAddress
|