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.
675 lines
16 KiB
675 lines
16 KiB
;+---------------------------------------------------------------------------
|
|
;
|
|
; Microsoft Windows
|
|
; Copyright (C) Microsoft Corporation, 1996.
|
|
;
|
|
; File: stubless.asm
|
|
;
|
|
; Contents: This module contains interpreter support routines for
|
|
; Intel platforms.
|
|
;
|
|
; Functions: Invoke - Calls a function from an interpreter.
|
|
; ObjectStublessClient3 - ObjectStublessClient511
|
|
;
|
|
; History: 07-Nov-94 DKays Created
|
|
; 24-Apr-96 ShannonC Added Invoke and support for
|
|
; 512 stubless client methods.
|
|
;
|
|
;----------------------------------------------------------------------------
|
|
|
|
.386p
|
|
|
|
EXTRN _ObjectStublessClient@8:NEAR
|
|
|
|
_TEXT SEGMENT DWORD PUBLIC 'CODE'
|
|
|
|
|
|
;+---------------------------------------------------------------------------
|
|
;
|
|
; Function: REGISTER_TYPE __stdcall Invoke(MANAGER_FUNCTION pFunction,
|
|
; REGISTER_TYPE *pArgumentList,
|
|
; ULONG cArguments);
|
|
;
|
|
; Synopsis: Given a function pointer and an argument list, Invoke builds
|
|
; a stack frame and calls the function.
|
|
;
|
|
; Arguments: pFunction - Pointer to the function to be called.
|
|
;
|
|
; pArgumentList - Pointer to the buffer containing the
|
|
; function parameters.
|
|
;
|
|
; cArguments - The size of the argument list in REGISTER_TYPEs.
|
|
;
|
|
; Notes: In the __stdcall calling convention, the callee must pop
|
|
; the parameters.
|
|
;
|
|
;----------------------------------------------------------------------------
|
|
_Invoke@12 PROC PUBLIC
|
|
|
|
push ebp; Save ebp
|
|
mov ebp, esp; Set ebp so the debugger can display the stack trace.
|
|
|
|
;Here is our stack layout.
|
|
;[ebp+0] = saved ebp
|
|
;[ebp+4] = return address
|
|
;[ebp+8] = pFunction
|
|
;[ebp+12] = pArgumentList
|
|
;[ebp+16] = cArguments
|
|
|
|
push edi; Save edi
|
|
push esi; Save esi
|
|
|
|
mov eax, [ebp+16]; Load number of parameters
|
|
shl eax, 2; Calculate size of parameters
|
|
sub esp, eax; Grow the stack
|
|
|
|
;Copy parameters from bottom to top.
|
|
mov esi, [ebp+12]; Load pointer to parameters
|
|
mov ecx, [ebp+16]; Load number of parameters
|
|
sub eax, 4;
|
|
mov edi, esp
|
|
add esi, eax; Get pointer to last source parameter
|
|
add edi, eax; Get pointer last destination parameter
|
|
|
|
pushf; Save direction flag
|
|
std; Set direction flag
|
|
rep movsd; Copy the parameters
|
|
popf; Restore direction flag
|
|
|
|
;call the server
|
|
mov eax, [ebp+8]; Load pointer to function.
|
|
call eax
|
|
|
|
mov edi, [ebp-4]; Restore edi
|
|
mov esi, [ebp-8]; Restore esi
|
|
mov esp, ebp; Restore stack pointer
|
|
pop ebp; Restore ebp
|
|
ret 12 ; Pop parameters
|
|
|
|
_Invoke@12 ENDP
|
|
|
|
|
|
;
|
|
; Define ObjectStublessClient routine macro.
|
|
;
|
|
StublessClientProc macro Method
|
|
|
|
_ObjectStublessClient&Method&@0 PROC PUBLIC
|
|
|
|
;
|
|
; NOTE :
|
|
; Don't use edi, esi, or ebx unless you add code to save them on
|
|
; the stack!
|
|
;
|
|
|
|
mov ecx, Method
|
|
jmp ObjectStubless
|
|
|
|
_ObjectStublessClient&Method&@0 ENDP
|
|
|
|
endm
|
|
|
|
|
|
;On entry, ecx contains method number.
|
|
ObjectStubless PROC PUBLIC
|
|
|
|
;
|
|
; NOTE :
|
|
; Don't use edi, esi, or ebx unless you add code to save them on
|
|
; the stack!
|
|
;
|
|
|
|
;
|
|
; Do this so the debugger can figure out the stack trace correctly.
|
|
; Will make debugging much easier.
|
|
;
|
|
push ebp
|
|
mov ebp, esp
|
|
|
|
; Push the method number.
|
|
push ecx
|
|
|
|
; Push the stack address of the parameters.
|
|
mov eax, ebp
|
|
add eax, 8
|
|
push eax
|
|
|
|
call _ObjectStublessClient@8
|
|
|
|
;
|
|
; After the call :
|
|
; Real return for the proxy is in eax.
|
|
; Parameter stack size is put in ecx by ObjectStublessClient for us.
|
|
;
|
|
; At this pointer eax (return), ecx (ParamSize), and edi, esi, ebx
|
|
; (non-volatile registers) can not be written!!!
|
|
;
|
|
|
|
; Don't forget to pop ebp.
|
|
pop ebp
|
|
|
|
; Pop our return address.
|
|
pop edx
|
|
|
|
; Pop params explicitly.
|
|
add esp, ecx
|
|
|
|
; This will return us from whichever StublessClient routine was called.
|
|
jmp edx
|
|
|
|
ObjectStubless ENDP
|
|
|
|
StublessClientProc 3
|
|
StublessClientProc 4
|
|
StublessClientProc 5
|
|
StublessClientProc 6
|
|
StublessClientProc 7
|
|
StublessClientProc 8
|
|
StublessClientProc 9
|
|
StublessClientProc 10
|
|
StublessClientProc 11
|
|
StublessClientProc 12
|
|
StublessClientProc 13
|
|
StublessClientProc 14
|
|
StublessClientProc 15
|
|
StublessClientProc 16
|
|
StublessClientProc 17
|
|
StublessClientProc 18
|
|
StublessClientProc 19
|
|
StublessClientProc 20
|
|
StublessClientProc 21
|
|
StublessClientProc 22
|
|
StublessClientProc 23
|
|
StublessClientProc 24
|
|
StublessClientProc 25
|
|
StublessClientProc 26
|
|
StublessClientProc 27
|
|
StublessClientProc 28
|
|
StublessClientProc 29
|
|
StublessClientProc 30
|
|
StublessClientProc 31
|
|
StublessClientProc 32
|
|
StublessClientProc 33
|
|
StublessClientProc 34
|
|
StublessClientProc 35
|
|
StublessClientProc 36
|
|
StublessClientProc 37
|
|
StublessClientProc 38
|
|
StublessClientProc 39
|
|
StublessClientProc 40
|
|
StublessClientProc 41
|
|
StublessClientProc 42
|
|
StublessClientProc 43
|
|
StublessClientProc 44
|
|
StublessClientProc 45
|
|
StublessClientProc 46
|
|
StublessClientProc 47
|
|
StublessClientProc 48
|
|
StublessClientProc 49
|
|
StublessClientProc 50
|
|
StublessClientProc 51
|
|
StublessClientProc 52
|
|
StublessClientProc 53
|
|
StublessClientProc 54
|
|
StublessClientProc 55
|
|
StublessClientProc 56
|
|
StublessClientProc 57
|
|
StublessClientProc 58
|
|
StublessClientProc 59
|
|
StublessClientProc 60
|
|
StublessClientProc 61
|
|
StublessClientProc 62
|
|
StublessClientProc 63
|
|
StublessClientProc 64
|
|
StublessClientProc 65
|
|
StublessClientProc 66
|
|
StublessClientProc 67
|
|
StublessClientProc 68
|
|
StublessClientProc 69
|
|
StublessClientProc 70
|
|
StublessClientProc 71
|
|
StublessClientProc 72
|
|
StublessClientProc 73
|
|
StublessClientProc 74
|
|
StublessClientProc 75
|
|
StublessClientProc 76
|
|
StublessClientProc 77
|
|
StublessClientProc 78
|
|
StublessClientProc 79
|
|
StublessClientProc 80
|
|
StublessClientProc 81
|
|
StublessClientProc 82
|
|
StublessClientProc 83
|
|
StublessClientProc 84
|
|
StublessClientProc 85
|
|
StublessClientProc 86
|
|
StublessClientProc 87
|
|
StublessClientProc 88
|
|
StublessClientProc 89
|
|
StublessClientProc 90
|
|
StublessClientProc 91
|
|
StublessClientProc 92
|
|
StublessClientProc 93
|
|
StublessClientProc 94
|
|
StublessClientProc 95
|
|
StublessClientProc 96
|
|
StublessClientProc 97
|
|
StublessClientProc 98
|
|
StublessClientProc 99
|
|
StublessClientProc 100
|
|
StublessClientProc 101
|
|
StublessClientProc 102
|
|
StublessClientProc 103
|
|
StublessClientProc 104
|
|
StublessClientProc 105
|
|
StublessClientProc 106
|
|
StublessClientProc 107
|
|
StublessClientProc 108
|
|
StublessClientProc 109
|
|
StublessClientProc 110
|
|
StublessClientProc 111
|
|
StublessClientProc 112
|
|
StublessClientProc 113
|
|
StublessClientProc 114
|
|
StublessClientProc 115
|
|
StublessClientProc 116
|
|
StublessClientProc 117
|
|
StublessClientProc 118
|
|
StublessClientProc 119
|
|
StublessClientProc 120
|
|
StublessClientProc 121
|
|
StublessClientProc 122
|
|
StublessClientProc 123
|
|
StublessClientProc 124
|
|
StublessClientProc 125
|
|
StublessClientProc 126
|
|
StublessClientProc 127
|
|
StublessClientProc 128
|
|
StublessClientProc 129
|
|
StublessClientProc 130
|
|
StublessClientProc 131
|
|
StublessClientProc 132
|
|
StublessClientProc 133
|
|
StublessClientProc 134
|
|
StublessClientProc 135
|
|
StublessClientProc 136
|
|
StublessClientProc 137
|
|
StublessClientProc 138
|
|
StublessClientProc 139
|
|
StublessClientProc 140
|
|
StublessClientProc 141
|
|
StublessClientProc 142
|
|
StublessClientProc 143
|
|
StublessClientProc 144
|
|
StublessClientProc 145
|
|
StublessClientProc 146
|
|
StublessClientProc 147
|
|
StublessClientProc 148
|
|
StublessClientProc 149
|
|
StublessClientProc 150
|
|
StublessClientProc 151
|
|
StublessClientProc 152
|
|
StublessClientProc 153
|
|
StublessClientProc 154
|
|
StublessClientProc 155
|
|
StublessClientProc 156
|
|
StublessClientProc 157
|
|
StublessClientProc 158
|
|
StublessClientProc 159
|
|
StublessClientProc 160
|
|
StublessClientProc 161
|
|
StublessClientProc 162
|
|
StublessClientProc 163
|
|
StublessClientProc 164
|
|
StublessClientProc 165
|
|
StublessClientProc 166
|
|
StublessClientProc 167
|
|
StublessClientProc 168
|
|
StublessClientProc 169
|
|
StublessClientProc 170
|
|
StublessClientProc 171
|
|
StublessClientProc 172
|
|
StublessClientProc 173
|
|
StublessClientProc 174
|
|
StublessClientProc 175
|
|
StublessClientProc 176
|
|
StublessClientProc 177
|
|
StublessClientProc 178
|
|
StublessClientProc 179
|
|
StublessClientProc 180
|
|
StublessClientProc 181
|
|
StublessClientProc 182
|
|
StublessClientProc 183
|
|
StublessClientProc 184
|
|
StublessClientProc 185
|
|
StublessClientProc 186
|
|
StublessClientProc 187
|
|
StublessClientProc 188
|
|
StublessClientProc 189
|
|
StublessClientProc 190
|
|
StublessClientProc 191
|
|
StublessClientProc 192
|
|
StublessClientProc 193
|
|
StublessClientProc 194
|
|
StublessClientProc 195
|
|
StublessClientProc 196
|
|
StublessClientProc 197
|
|
StublessClientProc 198
|
|
StublessClientProc 199
|
|
StublessClientProc 200
|
|
StublessClientProc 201
|
|
StublessClientProc 202
|
|
StublessClientProc 203
|
|
StublessClientProc 204
|
|
StublessClientProc 205
|
|
StublessClientProc 206
|
|
StublessClientProc 207
|
|
StublessClientProc 208
|
|
StublessClientProc 209
|
|
StublessClientProc 210
|
|
StublessClientProc 211
|
|
StublessClientProc 212
|
|
StublessClientProc 213
|
|
StublessClientProc 214
|
|
StublessClientProc 215
|
|
StublessClientProc 216
|
|
StublessClientProc 217
|
|
StublessClientProc 218
|
|
StublessClientProc 219
|
|
StublessClientProc 220
|
|
StublessClientProc 221
|
|
StublessClientProc 222
|
|
StublessClientProc 223
|
|
StublessClientProc 224
|
|
StublessClientProc 225
|
|
StublessClientProc 226
|
|
StublessClientProc 227
|
|
StublessClientProc 228
|
|
StublessClientProc 229
|
|
StublessClientProc 230
|
|
StublessClientProc 231
|
|
StublessClientProc 232
|
|
StublessClientProc 233
|
|
StublessClientProc 234
|
|
StublessClientProc 235
|
|
StublessClientProc 236
|
|
StublessClientProc 237
|
|
StublessClientProc 238
|
|
StublessClientProc 239
|
|
StublessClientProc 240
|
|
StublessClientProc 241
|
|
StublessClientProc 242
|
|
StublessClientProc 243
|
|
StublessClientProc 244
|
|
StublessClientProc 245
|
|
StublessClientProc 246
|
|
StublessClientProc 247
|
|
StublessClientProc 248
|
|
StublessClientProc 249
|
|
StublessClientProc 250
|
|
StublessClientProc 251
|
|
StublessClientProc 252
|
|
StublessClientProc 253
|
|
StublessClientProc 254
|
|
StublessClientProc 255
|
|
StublessClientProc 256
|
|
StublessClientProc 257
|
|
StublessClientProc 258
|
|
StublessClientProc 259
|
|
StublessClientProc 260
|
|
StublessClientProc 261
|
|
StublessClientProc 262
|
|
StublessClientProc 263
|
|
StublessClientProc 264
|
|
StublessClientProc 265
|
|
StublessClientProc 266
|
|
StublessClientProc 267
|
|
StublessClientProc 268
|
|
StublessClientProc 269
|
|
StublessClientProc 270
|
|
StublessClientProc 271
|
|
StublessClientProc 272
|
|
StublessClientProc 273
|
|
StublessClientProc 274
|
|
StublessClientProc 275
|
|
StublessClientProc 276
|
|
StublessClientProc 277
|
|
StublessClientProc 278
|
|
StublessClientProc 279
|
|
StublessClientProc 280
|
|
StublessClientProc 281
|
|
StublessClientProc 282
|
|
StublessClientProc 283
|
|
StublessClientProc 284
|
|
StublessClientProc 285
|
|
StublessClientProc 286
|
|
StublessClientProc 287
|
|
StublessClientProc 288
|
|
StublessClientProc 289
|
|
StublessClientProc 290
|
|
StublessClientProc 291
|
|
StublessClientProc 292
|
|
StublessClientProc 293
|
|
StublessClientProc 294
|
|
StublessClientProc 295
|
|
StublessClientProc 296
|
|
StublessClientProc 297
|
|
StublessClientProc 298
|
|
StublessClientProc 299
|
|
StublessClientProc 300
|
|
StublessClientProc 301
|
|
StublessClientProc 302
|
|
StublessClientProc 303
|
|
StublessClientProc 304
|
|
StublessClientProc 305
|
|
StublessClientProc 306
|
|
StublessClientProc 307
|
|
StublessClientProc 308
|
|
StublessClientProc 309
|
|
StublessClientProc 310
|
|
StublessClientProc 311
|
|
StublessClientProc 312
|
|
StublessClientProc 313
|
|
StublessClientProc 314
|
|
StublessClientProc 315
|
|
StublessClientProc 316
|
|
StublessClientProc 317
|
|
StublessClientProc 318
|
|
StublessClientProc 319
|
|
StublessClientProc 320
|
|
StublessClientProc 321
|
|
StublessClientProc 322
|
|
StublessClientProc 323
|
|
StublessClientProc 324
|
|
StublessClientProc 325
|
|
StublessClientProc 326
|
|
StublessClientProc 327
|
|
StublessClientProc 328
|
|
StublessClientProc 329
|
|
StublessClientProc 330
|
|
StublessClientProc 331
|
|
StublessClientProc 332
|
|
StublessClientProc 333
|
|
StublessClientProc 334
|
|
StublessClientProc 335
|
|
StublessClientProc 336
|
|
StublessClientProc 337
|
|
StublessClientProc 338
|
|
StublessClientProc 339
|
|
StublessClientProc 340
|
|
StublessClientProc 341
|
|
StublessClientProc 342
|
|
StublessClientProc 343
|
|
StublessClientProc 344
|
|
StublessClientProc 345
|
|
StublessClientProc 346
|
|
StublessClientProc 347
|
|
StublessClientProc 348
|
|
StublessClientProc 349
|
|
StublessClientProc 350
|
|
StublessClientProc 351
|
|
StublessClientProc 352
|
|
StublessClientProc 353
|
|
StublessClientProc 354
|
|
StublessClientProc 355
|
|
StublessClientProc 356
|
|
StublessClientProc 357
|
|
StublessClientProc 358
|
|
StublessClientProc 359
|
|
StublessClientProc 360
|
|
StublessClientProc 361
|
|
StublessClientProc 362
|
|
StublessClientProc 363
|
|
StublessClientProc 364
|
|
StublessClientProc 365
|
|
StublessClientProc 366
|
|
StublessClientProc 367
|
|
StublessClientProc 368
|
|
StublessClientProc 369
|
|
StublessClientProc 370
|
|
StublessClientProc 371
|
|
StublessClientProc 372
|
|
StublessClientProc 373
|
|
StublessClientProc 374
|
|
StublessClientProc 375
|
|
StublessClientProc 376
|
|
StublessClientProc 377
|
|
StublessClientProc 378
|
|
StublessClientProc 379
|
|
StublessClientProc 380
|
|
StublessClientProc 381
|
|
StublessClientProc 382
|
|
StublessClientProc 383
|
|
StublessClientProc 384
|
|
StublessClientProc 385
|
|
StublessClientProc 386
|
|
StublessClientProc 387
|
|
StublessClientProc 388
|
|
StublessClientProc 389
|
|
StublessClientProc 390
|
|
StublessClientProc 391
|
|
StublessClientProc 392
|
|
StublessClientProc 393
|
|
StublessClientProc 394
|
|
StublessClientProc 395
|
|
StublessClientProc 396
|
|
StublessClientProc 397
|
|
StublessClientProc 398
|
|
StublessClientProc 399
|
|
StublessClientProc 400
|
|
StublessClientProc 401
|
|
StublessClientProc 402
|
|
StublessClientProc 403
|
|
StublessClientProc 404
|
|
StublessClientProc 405
|
|
StublessClientProc 406
|
|
StublessClientProc 407
|
|
StublessClientProc 408
|
|
StublessClientProc 409
|
|
StublessClientProc 410
|
|
StublessClientProc 411
|
|
StublessClientProc 412
|
|
StublessClientProc 413
|
|
StublessClientProc 414
|
|
StublessClientProc 415
|
|
StublessClientProc 416
|
|
StublessClientProc 417
|
|
StublessClientProc 418
|
|
StublessClientProc 419
|
|
StublessClientProc 420
|
|
StublessClientProc 421
|
|
StublessClientProc 422
|
|
StublessClientProc 423
|
|
StublessClientProc 424
|
|
StublessClientProc 425
|
|
StublessClientProc 426
|
|
StublessClientProc 427
|
|
StublessClientProc 428
|
|
StublessClientProc 429
|
|
StublessClientProc 430
|
|
StublessClientProc 431
|
|
StublessClientProc 432
|
|
StublessClientProc 433
|
|
StublessClientProc 434
|
|
StublessClientProc 435
|
|
StublessClientProc 436
|
|
StublessClientProc 437
|
|
StublessClientProc 438
|
|
StublessClientProc 439
|
|
StublessClientProc 440
|
|
StublessClientProc 441
|
|
StublessClientProc 442
|
|
StublessClientProc 443
|
|
StublessClientProc 444
|
|
StublessClientProc 445
|
|
StublessClientProc 446
|
|
StublessClientProc 447
|
|
StublessClientProc 448
|
|
StublessClientProc 449
|
|
StublessClientProc 450
|
|
StublessClientProc 451
|
|
StublessClientProc 452
|
|
StublessClientProc 453
|
|
StublessClientProc 454
|
|
StublessClientProc 455
|
|
StublessClientProc 456
|
|
StublessClientProc 457
|
|
StublessClientProc 458
|
|
StublessClientProc 459
|
|
StublessClientProc 460
|
|
StublessClientProc 461
|
|
StublessClientProc 462
|
|
StublessClientProc 463
|
|
StublessClientProc 464
|
|
StublessClientProc 465
|
|
StublessClientProc 466
|
|
StublessClientProc 467
|
|
StublessClientProc 468
|
|
StublessClientProc 469
|
|
StublessClientProc 470
|
|
StublessClientProc 471
|
|
StublessClientProc 472
|
|
StublessClientProc 473
|
|
StublessClientProc 474
|
|
StublessClientProc 475
|
|
StublessClientProc 476
|
|
StublessClientProc 477
|
|
StublessClientProc 478
|
|
StublessClientProc 479
|
|
StublessClientProc 480
|
|
StublessClientProc 481
|
|
StublessClientProc 482
|
|
StublessClientProc 483
|
|
StublessClientProc 484
|
|
StublessClientProc 485
|
|
StublessClientProc 486
|
|
StublessClientProc 487
|
|
StublessClientProc 488
|
|
StublessClientProc 489
|
|
StublessClientProc 490
|
|
StublessClientProc 491
|
|
StublessClientProc 492
|
|
StublessClientProc 493
|
|
StublessClientProc 494
|
|
StublessClientProc 495
|
|
StublessClientProc 496
|
|
StublessClientProc 497
|
|
StublessClientProc 498
|
|
StublessClientProc 499
|
|
StublessClientProc 500
|
|
StublessClientProc 501
|
|
StublessClientProc 502
|
|
StublessClientProc 503
|
|
StublessClientProc 504
|
|
StublessClientProc 505
|
|
StublessClientProc 506
|
|
StublessClientProc 507
|
|
StublessClientProc 508
|
|
StublessClientProc 509
|
|
StublessClientProc 510
|
|
StublessClientProc 511
|
|
|
|
_TEXT ends
|
|
|
|
end
|
|
|