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.
 
 
 
 
 
 

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